2017-09-09 4 views
5

私のアプリでは、常にスプラッシュ画面から開始します。たとえば、私のアプリはバックグラウンドで開いていて、スプラッシュを開始する通知がポップアップします。これにより、実行中の以前のすべてのアクティビティが終了するはずです。スプラッシュアクティビティが開始されると、以前のすべてのアクティビティが終了します

実行中のすべてのアクティビティ参照のリストを格納することでこれを達成しました。スプラッシュアクティビティが開始されると、それだけでコールします。

for(runningActivity : runningActivitiesList) { 
    runningActivity.finish(); 
} 

このソリューションはうまくいきます。しかし、Android Studioでは、アクティビティへの参照を保存する際にメモリリークの警告が表示されます。

誰かが私にメモリリークを防ぐより良いアプローチを提案できますか?たぶん十分

+0

[こちら](https://stackoverflow.com/questions/2033914/is-quitting-an-application-frowned-upon?rq=1) – Gattsu

答えて

0

は、他のすべてのオプションを試してみましたが、唯一のものは、私の仕事です:

final Intent intent = new Intent(applicationContext, SplashActivity.class); 
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP 
      | IntentCompat.FLAG_ACTIVITY_CLEAR_TASK 
      | Intent.FLAG_ACTIVITY_NEW_TASK); 
    return IntentCompat.makeRestartActivityTask(intent.getComponent()); 

ご注意:このソリューションはまた、完全な証拠ではありません。 Google Playストアでアプリを開くと、アプリの別のインスタンスがバックグラウンドで実行されている場合でもスプラッシュアクティビティが開始されるため、したがって、私は同じ活動の2つのインスタンスを持つことになります。

5

は明確なスタックでの活動を開始することです:

Intent intent = new Intent(context, clazz); 
intent.setFlags(IntentCompat.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); 
context.startActivity(intent); 
0

あなたは適切なバックナビゲーションを処理するためにTaskBuilder APIを使用して活動を開始することができ、実行中のすべての/前のapplications.Insteadを完了する必要はありません。

これであなたのアクティビティを開きます。http://developer.android.com/reference/android/support/v4/app/TaskStackBuilder.htmlhttp://developer.android.com/guide/components/tasks-and-back-stack.htmlhttp://www.programcreek.com/java-api-examples/index.php?api=android.app.TaskStackBuilder:詳細は、これらのURLをフォロー

<activity 
     android:name=".YourActivity" 
     android:parentActivityName=".MainActivity" 
     android:screenOrientation="portrait" 
     android:windowSoftInputMode="stateAlwaysHidden|adjustPan">   
</activity> 

:としてYourActivity.classの親アクティビティを定義するマニフェストファイルで

private static PendingIntent makePendingIntent(@NonNull Context context, @NonNull Intent resultIntent) { 
TaskStackBuilder stackBuilder = TaskStackBuilder.create(context); 
// Adds the back stack 
stackBuilder.addParentStack(YourActivity.class); 
// Adds the Intent to the top of the stack 
stackBuilder.addNextIntent(resultIntent); 
// Gets a PendingIntent containing the entire back stack 
return stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); 
} 

0

アンドロイドマニフェストセット:

アンドロイド:launchMode = "singleTop" あなたは@ Nischalの保留意図での@ mac229のフラグを使用することができますあなたのアプリから生成される通知のために

関連する問題