当设备进入睡眠状态时,我的应用程序代码在什么时候停止运行?

时间:2012-06-27 17:55:48

标签: android multithreading sleep

具体来说,如果我在Activity类中运行了一个方法,那么当手机进入休眠状态(CPU关闭)时,方法是否会在调用onPause()之前运行完成?

class MyActivity extends Activity {
    ...
    public void doSomeWork() {
        ...
        ... // <-- Device goes to sleep at this point in time
        ...
        return; // Do we get here before onPause() is called?
    }
    ...
    @Override
    public void onPause() {
        ...
    }
    ...
}

除了Activities之外,当设备进入休眠状态时,一个正在运行的线程(可能由一个Activity类启动)是否会在处于的任何代码行中断?我在这篇文章中看到了相互矛盾的答案:Does a Thread launched by Activity continue running once the device goes to sleep?

更进一步,我知道当设备唤醒时,Activity的onResume()将被调用;如果上面的doSomeWork()或前面提到的线程在睡觉时中途确实被中断了,剩余的代码会恢复吗?

提前感谢任何见解。

2 个答案:

答案 0 :(得分:0)

这被认为是一个很好的Android练习,不能在主UI线程上运行长任务,因此你的doSomeWork()应该在几百毫秒内完成并在{{1}之前达到return语句调用。

关于onPause()中途中断 - 发生这种情况的唯一可能性是当你的应用程序显示可怕的ANR对话框并强行关闭时,所以你不应该担心在中途重新启动它。

答案 1 :(得分:-1)

此处当您离开活动或弹出窗口出现在您的活动中时,就会出现电话呼叫,或者您在调用Pause时旋转屏幕。 您提供的链接谈论AsyncTask。 AsyncTask是一个在获取一些数据后运行后台并更新UI的线程。在此过程中,如果用户旋转手机,Android将杀死活动并重新创建线程是否与活动相关联,那么您的活动将不会被杀死但是会泄漏。

如果您需要有关AsyncTask&amp;活动你可以读这个 Is AsyncTask really conceptually flawed or am I just missing something?

相关问题