当通过通知从锁定屏幕启动另一个Activity时,不会调用当前活动onResume()

时间:2018-05-04 04:30:53

标签: android android-lifecycle android-pendingintent

我有两项活动$xml->JobInfo->CompleteActivity2TestActivity在启动时会显示通知。单击通知时会启动Activity2。以下是TestActivity的代码。

Activity2.java

所有生命周期方法都属于import android.app.PendingIntent; import android.content.Intent; import android.support.v4.app.NotificationCompat; import android.support.v4.app.NotificationManagerCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import com.droidapp.apptest.R; public class Activity2 extends AppCompatActivity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_2); Log.w("app_test", "onCreate()"); showNotification(); } @Override protected void onStart() { Log.w("app_test", "onStart()"); super.onStart(); } @Override protected void onRestart() { Log.w("app_test", "onRestart()"); super.onRestart(); } @Override protected void onResume() { Log.w("app_test", "onResume()"); super.onResume(); } @Override protected void onPause() { Log.w("app_test", "onPause()"); super.onPause(); } @Override protected void onStop() { Log.w("app_test", "onStop()"); super.onStop(); } @Override protected void onDestroy() { Log.w("app_test", "onDestroy()"); super.onDestroy(); } public void showNotification() { Intent intent = new Intent(this, TestActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0); NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this, "CHANNEL_ID") .setSmallIcon(R.mipmap.ic_launcher) .setContentTitle("Title") .setContentText("Content text") .setContentIntent(pendingIntent) .setPriority(NotificationCompat.PRIORITY_DEFAULT); NotificationManagerCompat.from(this).notify(102, mBuilder.build()); } }

当Activity2第一次启动时。此处显示Activity2通知。

onCreate()

按主页按钮

W/app_test: onCreate()
W/app_test: onStart()
W/app_test: onResume()

点击通知W/app_test: onPause() W/app_test: onStop() 启动后。不调用TestActivity生命周期方法。一切都按预期工作。

如果不是按主页按钮,而是按电源按钮

Activity2

然后从锁定屏幕点击通知W/app_test: onPause() W/app_test: onStop() 调用生命周期方法。

Activity2

然后启动W/app_test: onRestart() W/app_test: onStart() W/app_test: onStop() 。这里奇怪的是TestActivity Activity2没有被调用。

但是,如果我没有点击通知,只需通过轻扫onResume()来解锁屏幕。

onResume()

在我的实际应用程序中,我在活动W/app_test: onRestart() W/app_test: onStart() W/app_test: onResume() 上注册BroadcastReceiver并注销onResume()。取消注册未注册的onPause()会导致BroadcastReceiver。现在我通过放置IllegalStateException变量来避免这种异常。

问题。它是预期的行为还是android框架中的错误?

修改即可。更奇怪的是。 如果我先按主页按钮,然后按电源按钮,然后从锁定屏幕点击通知。

boolean

然后启动W/app_test: onRestart() W/app_test: onStart() W/app_test: onResume() W/app_test: onPause() W/app_test: onStop()

清单

中的活动属性
TestActivity

1 个答案:

答案 0 :(得分:1)

这是按照预期的行为,因为当你点击来自锁定屏幕Activity2的通知时看不见并且转到TestActivity屏幕后面的背景,因此不会调用其onResume() 。但是,当您不点击通知并解锁手机时,Activity2会显示,并且会调用onResume()。希望它有所帮助。