私のアプリには次のものがあります。
-SplashScreen (SSc) アプリケーションの準備 (サービスの開始など) -MainActivity (MA) ほとんどのアクションを処理するアプリの最も関連性の高い部分 -およびそれほど関連性のないその他のアクティビティ
私のアプリでは、launchMode singleTask のような動作が必要です。これにより、SMS/EMail アプリでリンクをクリックして開いた場合でも、アプリが常に新しいタスクとして開始されます。アクティビティはすべて連続してナビゲートできるため、アクティビティのインスタンスを 1 つだけ持つのが最善です。
ただし、SSc を singleTask として起動すると、それはスタックのルートであり、MainActivity に移動し、ホームを押して、ランチャー アイコンをもう一度クリックすると、アプリが完全に再起動されます。そのため、SSc が再び表示されます。この状況では、代わりに MainActivty を前面に出してほしいと思います。
私の願いは次のとおりです: launcherclick -> SSc -> MA -> HOME -> launcherclick -> MAを前面に移動 -> HOME -> 最近から再起動 -> MAを前面に移動
リンクをクリック -> SSc/MA (最初の起動かどうか) 同じインスタンスで
私のアプリでは、複数のインスタンスを持つことは意味がありません。バックグラウンド サービスは一度に 1 つの MainActivity しか処理しないためです。これは、見られる「モノ」のためだけに頻繁にデータをポーリングするためです。
この目標を達成するための推奨事項はありますか?
私の最初のアイデアは、他のアクティビティにインテントをルーティングするためのレイアウトのない launchMode singletask を使用した LauncherActivity でした (これはおそらく singleTop !?、その場合は 1 つのタスクにしか含まれないため)。
public class LauncherActivity extends Activity {
private boolean firstStart = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
protected void onResume() {
super.onResume();
if(firstStart){
startActivity(new Intent(this, SplashScreen.class));
firstStart = false;
} else {
Intent i = new Intent(this, MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(i);
}
}
}
マニフェスト xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="x.startintenttest">
<application
android:allowBackup="true"
android:allowTaskReparenting="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name">
<activity
android:name="x.startintenttest.MainActivity"
android:label="@string/app_name"
android:launchMode="singleTop"></activity>
<activity
android:name="x.startintenttest.MainActivity2"
android:label="@string/title_activity_main_activity2"></activity>
<activity
android:name="x.startintenttest.SplashScreen"
android:label="@string/title_activity_splash_screen"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="*.xyz.de"
android:pathPattern="/...-........."
android:scheme="https" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>