私のアプリは、メインスレッドであまりにも多くの作業をしていると私に伝え続け、UIが触れる前にアプリが最初に読み込まれるまで待たなければクラッシュします。具体的には、私は 'myVideoView.setVideoURI'行をコメントアウトすると、videoViewにロードするビデオを待っているようです。Androidの設定ビデオURIのバックグラウンドでの作業
私はすでにサーバと通信するためのasynctaskを設定していますので、asynctaskを使ってビデオをバックグラウンドで設定し、完了したらプログレスバーを隠す方法があります。
ビデオロードコードをasynctaskの中に入れようとしましたが、これは「これはUIスレッドで行う必要があります」と続きました。もちろん、私は多分マルチスレッドの考え方を誤解しているでしょうが、もし誰かが私の主なスレッドの負担を減らす方法を明確にすることができたら、それはすばらしいことでしょう。ありがとうございました!
ここは私のコードサンプルです。このすべては現在onCreate内にあります。
myVideoView = (VideoView) findViewById(R.id.videoView);
try {
myVideoView.setVideoURI(Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.video));
} catch (Exception e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
myVideoView.requestFocus();
myVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
public void onPrepared(MediaPlayer mediaPlayer) {
myVideoView.seekTo(0);
}
});
// EMPTY ASYNCTASK
public class LoadVideo extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
// DO SOMETHING BEFORE IT STARTS
}
protected String doInBackground(String... args) {
// DO HEAVY LIFTING
return null;
}
protected void onPostExecute(String file_url) {
// DO SOMETHING AFTER IT FINISHES
}
}
ありがとう、私はそれをチェックアウトします! – user3689720
あなたのコメントにあったものをコピーしようとしましたが、実行されていないようです。私はそれを始めるために何か他に何かありますか? – user3689720
https://github.com/Froussios/Intro-To-RxJava/blob/master/Part%204%20-%20Concurrency/1.%20Scheduling%20and%20threading.mdこちらの使い方のチュートリアルです –