我最近为我的应用程序实现了通知。我一直在测试的是应用程序应该如何工作的行为。我想应该是这样的:
收到通知并通过intent打开Comments.class
-> MainActivity.class
->点击back(退出应用程序,进入Android设备主界面)->通过任务管理器重新打开应用程序->返回Comments.class
前几个步骤工作,但当我从任务管理器打开备份应用程序,我注意到它去Comments.class
,这似乎是预期的行为,因为我已经测试了其他Android应用程序。
然而,我的Comments.class
的一些属性没有被设置,我知道这是因为我的Comments.class
的onCreate
方法没有被调用。有什么原因能阻止这种情况发生吗?这是我的尝试:
NotificationService.java
:
Intent resultIntent = new Intent(context, Comments.class);
Intent backIntent = new Intent(context, MainActivity.class);
backIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//Set a random notification Id for each notification so that if you get multiple, the first does not get replaced.
Random random = new Random();
int notificationId = random.nextInt(9999 - 1000) + 1000;
PendingIntent pendingIntent = PendingIntent.getActivities(context, notificationId, new Intent[] { backIntent, resultIntent}, PendingIntent.FLAG_ONE_SHOT);
//When the notification is actually clicked on
notificationBuilder.setContentIntent(pendingIntent);
NotificationManager notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);
notificationManager.notify(notificationId, notificationBuilder.build());
这首先创建通知并通知应用程序的用户。然后Comments.java
的onCreate
函数被调用,这是我点击Notification
时预期的。然后,我点击back,它只是导航回MainActivity
,像这样:
Comment.java
:
@Override
public void onBackPressed() {
super.onBackPressed();
this.finish();
}
然后,调用并创建MainActivity.java
,这一切都很好。如果在MainActivity.java
上单击返回,则执行以下代码:
来自MainActivity.java
@Override
public void onBackPressed() {
super.onBackPressed();
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);
}
返回设备主屏幕。然而,我的应用程序的一个实例仍然在后台运行,当我在后台点击我的应用程序并把它放到前台时,我被导航回Comments.java
,但因为Comments.java
的onCreate
方法没有被调用,Activity
的一些细节没有被初始化。知道为什么会这样吗?
任何帮助都会很感激。谢谢!
将您的初始化放在Comment.java
的onResume
函数中。这里有一篇关于Android Activity Lifecycle的好文章,可以帮助你正确理解这种行为。
@Override
public void onResume() {
// Your initialization
}