0
我的應用一直告訴我,我在主線程上做了太多工作,如果在應用第一次加載之前沒有足夠長的時間來觸摸UI,它就會崩潰。具體來說,似乎我正在等待的是將視頻加載到videoView中,因爲當我註釋掉'myVideoView.setVideoURI'這一行時,它完全正常。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);
}
});
//空的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這裏是如何使用它的教程 –