暂停android活动时执行字节码会发生什么情况?
我有一些在启动android活动时运行的代码。如果需要,我将从共享首选项和web服务器中读取。其中一些将发生在主线程上,显然服务器请求位于异步任务中 现在我想知道的是,如果应用程序暂停会发生什么。字节码是否在程序计数器所在的位置停止,或等待主循环上发生的任何事情完成,然后调用onPause暂停android活动时执行字节码会发生什么情况?,android,Android,我有一些在启动android活动时运行的代码。如果需要,我将从共享首选项和web服务器中读取。其中一些将发生在主线程上,显然服务器请求位于异步任务中 现在我想知道的是,如果应用程序暂停会发生什么。字节码是否在程序计数器所在的位置停止,或等待主循环上发生的任何事情完成,然后调用onPause 此外,我还担心从网络接收数据时回调会发生什么情况。回调是否会在暂停恢复后发生,还是总是丢失?据我所知,当活动暂停时,从网络读取的线程仍然可以运行。好吧,我已经做了一些实验,并浏览了Android源代码中的活动
此外,我还担心从网络接收数据时回调会发生什么情况。回调是否会在暂停恢复后发生,还是总是丢失?据我所知,当活动暂停时,从网络读取的线程仍然可以运行。好吧,我已经做了一些实验,并浏览了Android源代码中的活动,现在我更清楚了 我发现的东西:
thread.currentThread.getId()
),该线程是主事件线程,并且该单个事件线程用于所有活动(除非您在清单中分配了新进程)。这并非完全出乎意料,但我确实怀疑onPause是否存在于用于停止活动的系统启动线程中final void performPause() {
mFragments.dispatchPause();
mCalled = false;
onPause();
mResumed = false;
然后
protected void onPause() {
if (DEBUG_LIFECYCLE) Slog.v(TAG, "onPause " + this);
getApplication().dispatchActivityPaused(this);
mCalled = true;
}
这表明,正如测试所预期的,暂停实际上只是将另一个事件分派到主循环
我假定mCalled变量有两个用途——一个用于确保在活动派生类中调用super()版本,另一个用于系统在销毁需要资源的进程之前检查是否调用了它
考虑到这是如何工作的,如果onPause运行缓慢,或者被偶数循环中的其他东西阻塞,那么您的进程可能在onPause完成之前被终止
显然,这其中的一些可能对某些人来说是显而易见的。但是我发现文档很混乱。我无法在不理解运行、暂停等概念在代码排序方面的实际含义的情况下对代码可能进入的状态进行推理,因为我认为暂停可能意味着gui线程正在执行的任何操作的运行时异常
如果我完全误解了这一点,并得到了错误的想法,请务必让我知道!我只使用了安卓2.5周,很可能我很困惑