プロジェクト内で詳細ページに直接ジャンプしてメインインタフェースに戻る

2256 ワード

プロジェクト内で詳細ページに直接ジャンプしてメインインタフェースに戻る


プロジェクトでよく遭遇する要件は、通知バーでPendingIntentを使用して関連するActivityにジャンプすることです.しかし、このActivityは通知内容の具体的なActivityに基づいていることが多く、通知が来たときにアプリケーションがKILLに落ちた可能性があります.このとき、この具体的な内容のDetailActivityをジャンプした後、Backキーを押してアプリケーションのメインインタフェース(MailActivity)に戻りたいのですが、あなたはどうしますか?DetailActivityでonBackPressedで判断?良い解決策がなければ、TaskStackBuilderを見てみましょう.

シナリオ1


TaskStackBuilder API level16(4.1)
TaskStackBuilderは、Android 3に適用するタスク間ナビゲーションに主に使用される合成されたロールバックスタックを構築することができる.0および新しいバージョン.
通常、戻りキーを使用してappをナビゲートしますが、戻りキーは現在のタスクのナビゲーションに基づいています.このローカルのナビゲーションは、現在のタスクのすべてのActivityが終了したときにのみ前のタスクに戻ります.現在のappから別のappにジャンプした場合、異なるタスクのジャンプ、すなわちタスクからタスク2にジャンプした場合、タスク2から戻りキーを押したときにタスク1に直接戻ることはできません.タスク2にActivityが1つしか存在しない場合を除きます.
より良いユーザー体験を提供するために、アプリケーション間のジャンプでは、TaskStackBuilderのgetPendingIntent(int requestCode,int flags)を使用して、現在のタスクのActivityと起動するActivityを新しいタスクに合成することができ、ユーザーが戻るキーを押す操作はこの新しいタスクに作用し、これはタスク間で直接ジャンプを実現することに相当します.
タスク1から1つのIntentを直接起動して別のアプリケーションのActivityを開くと、そのActivityが直接このアプリケーションのタスク2に追加され、戻るキーを押すと最終的にはメインインタフェースに戻るだけで、タスク1に戻ることはありません.関連例:
//         TaskStackBuilder 
        TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);

        Intent firstIntent = new Intent(this, this.getClass());
        Intent resultIntent = new Intent();
        ComponentName componentName = new ComponentName("com.ahei.myviewpager", "com.ahei.myviewpager.MainActivity");
        resultIntent.setComponent(componentName);
//        addNextIntent() Intent , app Activity app Activity stackBuilder 
        stackBuilder.addNextIntent(firstIntent);
        stackBuilder.addNextIntent(resultIntent);
//         PendingIntent stackBuilder 
        PendingIntent resultPendingIntent =stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
//         PendingIntent
        try {
            pendingIntent.send();
        } catch (PendingIntent.CanceledException e) {
            e.printStackTrace();
        }

シナリオ2


この点については、以前はMainActivityを直接スキップし、ルーティング分析を通じて対応するActivityにスキップしていましたが、Appではビジネス、type関連スキップなどのルーティングと関連する処理ルールが設定されていました.悪い点は、新しいルーティングルールがあれば更新する必要があるが、ほとんどの場合は適応している.すみません、@goeasywayのような処理方法は可能ですか?もっと良い処理方法はありますか?