我的应用由许多活动和BraodcastReceiver
组成。当我的应用程序收到广播的Intent时,如果它在前台,我想重新启动一个活动。我可以实现它吗?
答案 0 :(得分:2)
使用Intent.FLAG_ACTIVITY_REORDER_TO_FRONT启动活动,如果它已经在运行,则将其带到其任务的历史堆栈的前面,如果没有,则启动为新的。要确认活动是否正在运行,请使用ActivityManager
@Override
public void onReceive(Context context, Intent intent) {
//start activity
if(isRunning(context)){
Intent i = new Intent(context,Your_Activity_Name.class);
i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
context.startActivity(i);
}
else{
// Activity not available in activity stack
}
}
public boolean isRunning(Context ctx) {
ActivityManager activityManager = (ActivityManager)
ctx.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningTaskInfo> tasks =
activityManager.getRunningTasks(Integer.MAX_VALUE);
for (RunningTaskInfo task : tasks) {
if (ctx.getPackageName().equalsIgnoreCase(
task.baseActivity.getPackageName()))
return true;
}
return false;
}
并设置android:noHistory AndroidManifest.xml
以将活动堆栈中的活动存储在屏幕上不再可见:
<activity
android:noHistory="false"
android:name=".Your_Activity" />
答案 1 :(得分:0)
制作活动singleTop
并发送意图。