2016-06-24 3 views
0

私のアプリは、メインスレッドであまりにも多くの作業をしていると私に伝え続け、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 

    } 

} 

答えて

0

はい、溶液 - 使用rxJavaのマルチスレッディングがあります。これは、あるスレッドでリクエストを作成し、別のスレッドでそれを実行し(たとえば計算など)、メインスレッドで結果を処理することを可能にします。マルチスレッドを処理するのは現代的な方法です。私は現在のプロジェクトでそれをたくさん使っています。 コメントを見るhttps://stackoverflow.com/a/38002606/6175778

+0

ありがとう、私はそれをチェックアウトします! – user3689720

+0

あなたのコメントにあったものをコピーしようとしましたが、実行されていないようです。私はそれを始めるために何か他に何かありますか? – user3689720

+0

https://github.com/Froussios/Intro-To-RxJava/blob/master/Part%204%20-%20Concurrency/1.%20Scheduling%20and%20threading.mdこちらの使い方のチュートリアルです –

関連する問題