当我收到消息时,我需要将活动带到前面。我使用以下代码:
public void BringToFront()
{
Intent intent = new Intent();
intent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
intent.setClass(getApplicationContext(), getClass());
startActivity(intent);
}
当我将活动置于最前面时,之前的数据会丢失,即使活动未被操作系统杀死。有没有办法让活动恢复而不会丢失数据,或者我还需要恢复数据?
由于
答案 0 :(得分:1)
您的代码不起作用。您的活动仅在其位于前面时才有效。如果它不在前面,则无法处理,因此永远不会调用您的方法。活动应始终在onSaveInstanceState或更改数据时保存要保留的数据。有许多方法可以在活动之间保存数据。 如果您希望自己的活动在前面,则必须关闭所有活动。如果您再次需要这些活动,则应让他们保存数据,然后使用新数据重新启动它们。
我建议您阅读有关活动如何运作的文档....
答案 1 :(得分:0)
根据您的情况,在您的活动中使用此方法。它会起作用。
protected void moveToFront() {
if (Build.VERSION.SDK_INT >= 11) { // honeycomb
final ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
final List<RunningTaskInfo> recentTasks = activityManager.getRunningTasks(Integer.MAX_VALUE);
for (int i = 0; i < recentTasks.size(); i++)
{
Log.d("Executed app", "Application executed : "
+recentTasks.get(i).baseActivity.toShortString()
+ "\t\t ID: "+recentTasks.get(i).id+"");
// bring to front
if (recentTasks.get(i).baseActivity.toShortString().indexOf("Your app pckg name") > -1) {
activityManager.moveTaskToFront(recentTasks.get(i).id, ActivityManager.MOVE_TASK_WITH_HOME);
}
}
}
}
此外,您还需要在清单中添加以下权限。
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.REORDER_TASKS" />