【发布时间】:2011-09-28 21:13:23
【问题描述】:
我正在尝试实现一个子活动来使用 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 中的这段代码与从媒体播放器回调中调用完成一样糟糕:
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 >>>
【问题讨论】:
-
由于愚蠢的错误而浪费了很多时间。我从一个不同的活动中复制/粘贴了一个 onPause,其中有一个临时的 System.exit(0)。啊。对不起,如果我在这上面浪费了其他人的时间。
标签: android