繁体   English   中英

未调用Activity生命周期方法的onPause()和onStop()

[英]onPause() and onStop() of Activity lifecycle methods not being called

我只有一项Activity和一项Service 该活动用于搜索,该服务用于在所有屏幕上显示悬停窗口小部件,就像Facebook聊天头一样。

当用户离开活动(如按返回键)时,我启动服务,小部件开始悬停。 单击悬停窗口小部件后,活动将再次通过使用FLAG_ACTIVITY_NEW_TASK从服务中重新启动。 但是,当我的活动与其他应用程序活动重叠时,这样做不会onStop()onPause() 当调用onStop()之上的活动时,将onStop()

有人可以解释为什么会这样吗? 提前致谢。

活动代码:

public class CouponSearchActivity extends AppCompatActivity {

public static final String TAG = CouponSearchActivity.class.getSimpleName();
public static final String BROADCAST_ACTION_ACTIVITY_STARTED = 

"activity_created";
    public static final String BROADCAST_ACTION_ACTIVITY_STOPPED = "activity_stopped";

public static void startActivity(Context context){
    Intent intent = new Intent(context, CouponSearchActivity.class);
    context.startActivity(intent);
}

public static void startActivityFromService(Context context){
    Intent intent = new Intent(context, CouponSearchActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(intent);
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.d("TAG",": onCreate()");
    setContentView(R.layout.activity_coupon_search);
    CouponWidgetService.stopService(this);
    if(savedInstanceState == null){
        initCouponSearchFragment();
    }
}

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    Log.d("TAG",": onNewIntent()");
}

private void initCouponSearchFragment(){
    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.add(R.id.container, CouponSearchFragment.newInstance()).commit();
}

private void sendBroadcast(){
    Intent intent = new Intent();
    intent.setAction(BROADCAST_ACTION_ACTIVITY_STARTED);
    sendBroadcast(intent);
    Log.d("Broadcast sent", action = " +BROADCAST_ACTION_ACTIVITY_STARTED);
}

@Override
protected void onResume() {
    super.onResume();
    Log.d("TAG","onResume()");
    sendBroadcast();
    CouponWidgetService.stopService(this);
}

@Override
protected void onPause() {
    super.onPause();
    Log.d("TAG + "onPause()");
}

@Override
protected void onStop() {
    super.onStop();
    Intent intent = new Intent();
    intent.setAction(BROADCAST_ACTION_ACTIVITY_STOPPED);
    sendBroadcast(intent);
    Log.d("TAG", "onStop()");
    Log.d("Broadcast sent", action = " + BROADCAST_ACTION_ACTIVITY_STOPPED);
    CouponWidgetService.startService(this, StoreCoupons.getStoreCouponsResponse(), StoreCoupons.getSelectedCategories());
}

@Override
public void onBackPressed() {
    Log.d("onBackPressed()");
    //CouponWidgetService.startService(this, StoreCoupons.getStoreCouponsResponse(), StoreCoupons.getSelectedCategories());
    super.onBackPressed();
} 

但是,当我的活动与其他应用程序活动重叠时,这样做不会调用onStop()或onPause()。

在我看来,这是一种合法行为。 当您的Activity与其他Activity重叠时,将调用onPause 如果“重叠”完成(即您的“ Activity不再可见),则也应调用其onStop

稍后,当您单击“悬停窗口小部件”时,您的“ Activity已经暂停(并且可能已停止),因此不会再获得这些生命周期回调。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM