プロジェクト内で詳細ページに直接ジャンプしてメインインタフェースに戻る
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のような処理方法は可能ですか?もっと良い処理方法はありますか?
// 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();
}