4

私のアプリには次のものがあります。

-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>
4

2 に答える 2

9

その簡単な、私も同じことをしました。スプラッシュとメイン アクティビティに singleTask を使用していました。私は同じ問題に直面しました(スプラッシュはすべてのウェイクアップで表示されていました)。しかし、スプラッシュから singleTask を削除し、MA だけのためにそれを保持することでこれを解決しました (以前は、MA の開始時に、splashActivity を終了していました)。このトリックを試してみてください。

于 2014-05-14T07:37:41.087 に答える