0

具体来说,如果我的 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() {
        ...
    }
    ...
}

除了活动之外,当设备进入睡眠状态时,正在运行的线程(可能由活动类启动)是否会在它所在的任何代码行被中断?我在这篇文章中看到了相互矛盾的答案:一旦设备进入睡眠状态,Activity 启动的线程是否继续运行?

更进一步,我知道设备唤醒时将调用 Activity 的 onResume() ;如果上面的 doSomeWork() 或上述线程在进入睡眠状态时确实在中途中断,剩余的代码会恢复吗?

提前感谢您的任何见解。

4

2 回答 2

0

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

关于doSomeWork()中途中断——发生这种情况的唯一可能性是当您的应用程序显示可怕的 ANR 对话框并强制关闭时,因此您不必担心中途重新启动它。

于 2012-06-28T00:01:58.993 回答
-1

在这里,当您退出活动或您的活动出现一个弹出窗口时,例如出现电话或您在暂停时旋转屏幕。您提供的链接讨论了 AsyncTask。AsyncTask 是一个在后台运行并在获取一些数据后更新 UI 的线程,在此过程中,如果用户旋转手机,Android 会终止 Activity,如果线程链接到 Activity 则重新创建,那么您的 Activity 不会被终止,而是会泄漏出去。

如果您需要有关 AsyncTask 和活动的更多详细信息,您可以阅读此 AsyncTask 在概念上真的存在缺陷还是我只是遗漏了什么?

于 2012-06-27T18:09:50.437 回答