我有两项活动$xml->JobInfo->Complete
和Activity2
。 TestActivity
在启动时会显示通知。单击通知时会启动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
答案 0 :(得分:1)
这是按照预期的行为,因为当你点击来自锁定屏幕Activity2
的通知时看不见并且转到TestActivity
屏幕后面的背景,因此不会调用其onResume()
。但是,当您不点击通知并解锁手机时,Activity2
会显示,并且会调用onResume()
。希望它有所帮助。