如何把一个活动前景(顶级的stack)?
-
19-09-2019 - |
题
在安卓,我定义的活动ExampleActivity.
当我应用程序的启动的一个实例这一活动的创建,说这是 A
.当用户点击按钮 A
, 另一个实例B-活动,B。现在的任务堆是B-A,B。然后,用户点击按钮B的另一个实例C-活动和C。现在的任务堆C-B-A、C。
现在,当用户击按钮C,我想要应用程序带来一个前景,即使是在顶部的任务叠,A-C-B。
我怎么可以写的代码要让它发生?
解决方案
您可以试试这个 FLAG_ACTIVITY_REORDER_TO_FRONT
(文档精确地描述了你想要什么)
其他提示
我发现要做到这一点,最好的办法是使用相同的意图是Android主屏幕使用 - 应用程序启动
例如:
Intent i = new Intent(this, MyMainActivity.class);
i.setAction(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_LAUNCHER);
startActivity(i);
这样一来,我的包中任何活性最近使用的用户再次带回前。我发现这个有用的,使用我的服务的的PendingIntent让用户返回到我的应用程序。
下面是一个如何做到这一点一个代码的示例:
Intent intent = getIntent(getApplicationContext(), A.class)
这将确保你只在堆栈上活动的一个实例。
private static Intent getIntent(Context context, Class<?> cls) {
Intent intent = new Intent(context, cls);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
return intent;
}
FLAG_ACTIVITY_REORDER_TO_FRONT : 如果在传递给Context.startActivity()的意图设置,该标志将导致启动的活动被带到其任务的历史堆栈的前方,如果它已经在运行。
Intent i = new Intent(context, AActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(i);
我觉得Intent
标志的组合应该做的伎俩。特别是, Intent.FLAG_ACTIVITY_CLEAR_TOP
和Intent.FLAG_ACTIVITY_NEW_TASK
。
在调用startActvity
之前这些标记添加到您的意图。
i.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
请注意你的homeactivity launchmode应当single_task
在一般我认为是不推荐的活动管理的这种方法。与重新激活活动的两步倒在堆栈中的问题是,这种活动可能已经被杀害。我的建议是到记住你的活动的情况,并startActivity ()
启动它们
我相信你已经看到了这个页面,但对于您的方便,该链接
如果你想带活动栈顶上点击时通知,然后你可能需要做到以下几使FLAG_ACTIVITY_REORDER_TO_FRONT工作:
该方案对于我这是为了让广播接收听广播的行动通知的触发器。所以基本上:
通知触发广播行动的一个额外的活动的名称推出。
广播接收抓住这个时通知被点击,然后创造了一个意图启动,活动使用的FLAG_ACTIVITY_REORDER_TO_FRONT标志
活动被带到顶部的活动堆,没有重复。
如果您使用的“谷歌云消息”以接收与“的PendingIntent”级推送通知,下面的代码显示在仅操作栏中的通知。
点击没有任何活动将被创建的通知时,最后的有源活性恢复保持当前状态,而不问题。
Intent notificationIntent = new Intent(this, ActBase.class);
**notificationIntent.setAction(Intent.ACTION_MAIN);
notificationIntent.addCategory(Intent.CATEGORY_LAUNCHER);**
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.ic_launcher)
.setContentTitle("Localtaxi")
.setVibrate(vibrate)
.setStyle(new NotificationCompat.BigTextStyle().bigText(msg))
.setAutoCancel(true)
.setOnlyAlertOnce(true)
.setContentText(msg);
mBuilder.setContentIntent(contentIntent);
NotificationManager mNotificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());
侨!