[英]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.