내 앱은 메인 스레드에서 너무 많은 작업을하고 있으며, UI를 터치하기 전에 앱이 처음로드 될 때까지 충분히 기다리지 않으면 충돌합니다. 특히, 그것은 'myVideoView.setVideoURI'줄을 주석으로 때문에 완전히 작동합니다 때문에 비디오 뷰에로드 할 비디오 기다리고 있어요 것 같습니다.안드로이드는 백그라운드에서 비디오 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 여기 사용 방법에 대한 자습서입니다. –