Androidはactivityがロードされているかどうかを判断します
1321 ワード
チャットアプリにはよく友达リスト、友达会話リストがあり、ロジックは一般的に友达リストの友达をクリックすることでチャットページにジャンプします.友達リストのActivityをA,友達会話リストのActivityをBとする.正常論理はA->Bである.BでonReturn()メソッドはAに戻る.
チャットアプリケーションが外部局で実行する場合、ホームキーをクリックしてプログラムonPause()を生成する場合と、プログラムのmainを終了する場合の2つがある.activityもfinish()を適用した.ホームキーの時Activityはスタックに残っており、プログラムが他のページで通知を受け、通知欄をクリックして直接Bに入る場合と一致している.Bで出られるのはfinish()だけでいいので、ページは前のページに直接戻ります.しかし、mainの場合があります.finish()後、Bも直接finish()であれば、プログラムは直接デスクトップに戻ります.このような体験はよくありません.Bは単独のアプリケーションのような感じがします.このとき、Activity Managerで現在のアプリケーション活動のタスク情報を取得し、アプリケーションのエントリActivityがRunningTaskInfoのbaseActivityかどうかを見て、コードプログラムが実行されている場合はfinishだけでいいです.そうしないと、アプリケーションを再開すればいいです.
この場合、ページのデザインは微信、あぜ道とは異なり、それらの友达リストの下にはtabhostのようなレイアウトがあり、通知メッセージは友达リストページに入るだけでいいので、友达リストを通じて会話ページに入ることができます.これにより,会話ページを閉じてプログラムが直接終了する問題ではなく,会話ページを閉じて戻ってきたのが友人ページである.
チャットアプリケーションが外部局で実行する場合、ホームキーをクリックしてプログラムonPause()を生成する場合と、プログラムのmainを終了する場合の2つがある.activityもfinish()を適用した.ホームキーの時Activityはスタックに残っており、プログラムが他のページで通知を受け、通知欄をクリックして直接Bに入る場合と一致している.Bで出られるのはfinish()だけでいいので、ページは前のページに直接戻ります.しかし、mainの場合があります.finish()後、Bも直接finish()であれば、プログラムは直接デスクトップに戻ります.このような体験はよくありません.Bは単独のアプリケーションのような感じがします.このとき、Activity Managerで現在のアプリケーション活動のタスク情報を取得し、アプリケーションのエントリActivityがRunningTaskInfoのbaseActivityかどうかを見て、コードプログラムが実行されている場合はfinishだけでいいです.そうしないと、アプリケーションを再開すればいいです.
Intent mainIntent = new Intent(context, main.class);
ActivityManager am = (ActivityManager) context
.getSystemService(ACTIVITY_SERVICE);
List<RunningTaskInfo> appTask = am.getRunningTasks(1);
if (appTask.size() > 0
&& appTask.get(0).baseActivity
.equals(mainIntent.getComponent())) {
finish();
} else {
startActivity(new Intent(getActivity(), main.class)
.putExtra(Contracts.KEY_NOTIFY_LAUNCHER, true));
finish();
}
この場合、ページのデザインは微信、あぜ道とは異なり、それらの友达リストの下にはtabhostのようなレイアウトがあり、通知メッセージは友达リストページに入るだけでいいので、友达リストを通じて会話ページに入ることができます.これにより,会話ページを閉じてプログラムが直接終了する問題ではなく,会話ページを閉じて戻ってきたのが友人ページである.