关闭android子活动

时间:2011-09-28 21:13:24

标签: android

我正在尝试使用MediaPlayer实现一个子活动来播放mp4电影。在试图用setResult完成活动并完成onCompletion内部证明是有问题的。然后我开始搜索并搜索关闭子活动的示例,并了解它必须从UI线程完成。

我简化了删除大多数媒体播放器的子活动,并将完成代码移动到onCreate,至少让它从那里开始工作。

这有效:

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

那么,我如何从onCompletion做到这一点?到目前为止我发现的最好的建议是使用一个处理程序来执行它,但是onCreate中的这个代码与从mediaplayer回调中调用finish完全一样糟糕:

    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)" 
        }
    });

请让我回到正轨!

当finish()在onCompletion()的末尾时,这是logcat输出:

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 >>>

1 个答案:

答案 0 :(得分:0)

我在finish()方法中调用onCompletion()时没有任何问题。我是在自己使用MediaPlayer制作的自定义视频播放器中自己做的,而且效果很好。