2011-09-28 96 views
0

我想實現一個使用MediaPlayer播放mp4電影的子活動。在嘗試用setResult完成活動並完成onCompletion時證明存在問題。然後我開始搜索並搜索關閉子活動的示例,並瞭解到它必須從UI線程完成。關閉android子活動

我簡化了刪除大部分媒體播放器的子活動,並將完成代碼移到了onCreate中,至少讓它從那裏開始工作。

這工作:

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

所以,我怎麼做到這一點從onCompletion?到目前爲止,我已經找到了最好的建議是使用一個處理器做然而,這代碼的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)" 
     } 
    }); 

請讓我回到正軌!

這裏是logcat的輸出時結束()是在onCompletion()的結尾:

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複製/粘貼了一個不同的活動,其中有一個臨時System.exit(0)。啊。對不起,如果我浪費了其他人的時間。 – user969956

回答

0

我沒有看到在onCompletion()方法調用finish()任何問題。我在使用MediaPlayer製作的自定義視頻播放器中自己做這件事,它工作得很好。