2011-09-28 4 views
0

MediaPlayer를 사용하여 mp4 영화를 재생하기위한 하위 활동을 구현하려고합니다. setResult로 액티비티를 끝내고 onCompletion 내부에서 마무리하는 것은 문제가 있음을 증명했습니다. 그런 다음 하위 액티비티를 종료하는 예제를 검색하고 검색하여 UI 스레드에서 완료해야한다는 것을 알게되었습니다.android sub activity 종료

대부분의 미디어 플레이어를 제거하는 하위 액티비티를 단순화하고 finish 코드를 onCreate로 옮겨 적어도 거기서 작동하도록했습니다.

이 작동 :

그래서
// calls onActivityResult, graceful exit, etc 
    Log.d("TAG", Thread.currentThread().getName()); // outputs "main" 
    signMovieActivity.this.setResult(99); 
    signMovieActivity.this.finish(); 

, 어떻게 onCompletion에서이 작업을 수행합니까? 지금까지 발견 한 가장 좋은 제안은 MediaPlayer를 콜백에서 마무리를 호출만큼이나 제대로 작동에서 onCreate 안에 그러나이 코드를 그것을 할 처리기를 사용하는 것입니다

Handler handler = new Handler(); 
    handler.post(new Runnable() { 
     public void run() { 
     Log.d("TAG", Thread.currentThread().getName()); // outputs "main" 
      signMovieActivity.this.setResult(99); 
      signMovieActivity.this.finish(); // Full meltdown starting with "I/AndroidRuntime(26581): AndroidRuntime onExit calling exit(0)" 
     } 
    }); 

는 다시 궤도에 나를 넣어주세요!

D/movie(2144): onCompletion called 
D/movie(2144): thread is main 
I/FFPlayer(1169): tm 05460 [InputDemux] Start to wait a/v done 2 2 
I/FFPlayer(1169): tm 00858 [InputDemux] Start to wait a/v done 2 2 
I/FFPlayer(1169): tm 01216 [AudioProc] thread exited 
I/FFPlayer(1169): tm 00902 [InputDemux] Start to wait a/v done 0 2 
I/FFPlayer(1169): tm 300655 [VideoPlay] thread exited 
I/FFPlayer(1169): tm 00473 [VideoProc] thread exited 
I/FFPlayer(1169): tm 03737 [inputDemux] thread exited. 
I/FFPlayer(1169): tm 85592 FFPlayer deleted, mEngine = 0x3c148 this = 0xc860, Count = 0 
D/dalvikvm(2026): GC_EXPLICIT freed 823 objects/57624 bytes in 55ms 
D/dalvikvm(2037): GC_EXPLICIT freed 618 objects/42128 bytes in 71ms 
<<< finish called here >>> 
I/AndroidRuntime(2144): AndroidRuntime onExit calling exit(0) 
I/ActivityManager(1357): Process com.sign (pid 2144) has died. 
I/WindowManagerService(1357): WIN DEATH: Window{4617dc40 com.sign/com.sign.signActivity paused=false} 
I/ActivityManager(1357): Start proc com.sign for activity com.sign/.signActivity: pid=2165 uid=10126 gids={3003, 1015} 
I/WindowManagerService(1357): WIN DEATH: Window{461a3f90 com.sign/com.sign.signMovieActivity paused=true} 
I/WindowManagerService(1357): WIN DEATH: Window{460f5a10 SurfaceView paused=false} 
<<< entire application restarts >>> 
+0

멍청한 실수로 많은 시간을 낭비했습니다. onPause copy/임시 System.exit (0)이있는 다른 활동에서 붙여 넣기했습니다. 응. 미안하지만 다른 사람의 시간 낭비했다면. – user969956

답변

0

내가 onCompletion() 방법 finish() 호출에 문제를 보지 않는다 : 마무리() onCompletion()의 단부에있을 때

여기서 로그 캣 출력한다. 나는 MediaPlayer을 사용하여 만든 사용자 지정 비디오 플레이어에서 직접 그 작업을 수행하며 정상적으로 작동합니다.

관련 문제