首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >传入调用期间活动生命周期的奇怪行为:延迟onStop()

传入调用期间活动生命周期的奇怪行为:延迟onStop()
EN

Stack Overflow用户
提问于 2018-05-18 00:49:23
回答 2查看 1.6K关注 0票数 5

我有一个没有UI的简单活动。我想在调用期间检查活动的生命周期方法。

当call的通知到达时,没有任何事情按预期进行。当我接受呼叫时,call的活动就会掩盖我的活动。因此,理想情况下应该立即调用onStop()。我已经检查了日志,在接受呼叫时只调用了onPause()。但是在2-3秒之后,onStop()也会被调用。

活动

代码语言:javascript
复制
public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.e(TAG, "onStart: ");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.e(TAG, "onStop: ");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.e(TAG, "onPause: ");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.e(TAG, "onResume: ");
    }
}

清单

代码语言:javascript
复制
   <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

日志

代码语言:javascript
复制
05-17 22:10:25.025 E/MainActivity: onStart: 
05-17 22:10:25.054 E/MainActivity: onResume: 


When call has been accepted:
05-17 22:10:34.405 E/MainActivity: onPause: 

After 2-4 seconds:

05-17 22:10:38.144 E/MainActivity: onStop: 

根据onStop()的:

代码语言:javascript
复制
Called when you are no longer visible to the user. You will next receive either onRestart(), onDestroy(), or nothing, depending on later user activity.

在这里,另一个活动是覆盖并隐藏我的活动。因此,应该在onPause()之后立即调用onStop()

我已经在Moto G4设备和Nexus5模拟器上进行了测试。两者都表现出相同的行为。延迟onStop()调用的原因是什么?

有人能解释一下内部细节吗?

截图

EN

回答 2

Stack Overflow用户

发布于 2018-05-23 08:03:57

如果要在活动A的顶部打开活动B,则生命周期如下所示

活动A的

  1. onPause is called
  2. onCreate of activity B is
  3. onStart is called
  4. onResume of activity B is
  5. onStart is called
  6. onResume of activity B is onStop of activity A is can (除了部分可见的活动)
  7. 在内存不足的情况下活动A的onDestroy也可以称为

正如您所看到的,在活动A的onpause和onstop之间调用了许多方法,因此出现了延迟

票数 0
EN

Stack Overflow用户

发布于 2018-05-29 00:03:56

我认为这更多地与呼叫显示的实现方式有关。当你的活动不再具有前台的主要焦点,但在技术上仍然是“可见的”时,就会调用onPause。当您的活动不再可见时,将调用onStop

两个活动可以有一个可见状态,这将导致只为活动调用onPause,而不是焦点。通过在activity顶部显示call视图,您的activity可能仍然是“可见的”,而不会完全消失。这就是为什么调用onPause而不是onStop的原因。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50396700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档