1

メッセージを受け取ったら、アクティビティを前面に出す必要があります。私は次のコードを使用します:

public void BringToFront()
{
    Intent intent = new Intent();
    intent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
    intent.setClass(getApplicationContext(), getClass());
    startActivity(intent);
}

アクティビティを最上位に取得すると、OSによってアクティビティが強制終了されていなくても、以前のデータは失われます。データを失うことなくアクティビティを取り戻す方法はありますか、それともとにかくデータを回復する必要がありますか?

ありがとう

4

2 に答える 2

1

コードが機能しません。アクティビティは、前にある場合にのみアクティブになります。前面にない場合は処理できないため、メソッドが呼び出されることはありません。アクティビティは、onSaveInstanceStateに、またはデータが変更されたときに、保持するデータを常に保存する必要があります。アクティビティ間でデータを保存する方法はたくさんあります。アクティビティを前面に表示する場合は、その上にあるすべてのアクティビティを閉じる必要があります。これらのアクティビティが再度必要な場合は、データを保存してもらい、新しいデータで再開する必要があります。

アクティビティの仕組みに関するドキュメントを読むことをお勧めします。

于 2012-06-13T07:24:44.743 に答える
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" />
于 2014-07-08T10:28:01.317 に答える