我的应用程序由许多活动和一个BraodcastReceiver
. 当我的应用程序接收到广播 Intent 时,如果它在前台,我想重新启动一个活动。我该如何实现它?
问问题
941 次
2 回答
2
如果它已经在运行,则使用Intent.FLAG_ACTIVITY_REORDER_TO_FRONT启动要被带到其任务历史堆栈前面的活动,如果没有,则作为新的启动。确认 Activity 是否正在运行或不使用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 存储在屏幕上不再可见的活动堆栈中:
<activity
android:noHistory="false"
android:name=".Your_Activity" />
于 2012-12-17T07:25:07.343 回答
0
进行活动singleTop
并发送意图。
于 2012-12-17T07:21:41.157 回答