Androidに通知欄情報をクリックして実行中のプログラムに戻り、すべてのactivityを完全に終了させる
6094 ワード
最近、開発中のアプリケーションがホームキーで閉じた後、通知欄から再開した後、終了ボタンでアプリケーションを閉じることができないことが発見され、ネット上でnを調べた後、いくつかの肝心な原因を発見し、まだテストを実践していないので、先にメモを取った.
まず、その理由の1つは、通知欄からアプリケーションを開くのが新しくactivityが開かれ、新しいtaskスタックが存在する可能性があります.この場合、restartpackage()メソッドを使用してアプリケーションのすべてのactivityを閉じることはできません.解決策は、通知欄からアプリケーションを開くときに元のactivityに戻るか、すべてのtaskのactivityを閉じることができます.
方法2は試したことがあるが、activityをすべて取り出す方法が分からず、taskもどのようにクリアするか分からない.方法1今考えてみると、この方法をお勧めすべきだと思います.見つけた方法の資料を先に貼ってください.
また、ここでも設定したほうがいいかもしれません.
もっと詳しく見ると原博文はhttp://www.cnblogs.com/hanyonglu/archive/2012/04/15/2450551.html
先に貼って、明日テストを実践してから実際の実現方法を貼ってください.
ネットで探してみて、見つけた文章は難しいと言っているようで、以上の方法はテストしても無駄で、それから私は各flagマークをよくめくって、このIntentを発見しました.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORYは私の目の前を明るくしましたが、テストを経ても私は管理しているかどうか分かりません.私のニーズはそれを表示するためではなく、私のアプリケーションが閉じている間に問題に遭遇したからです.閉じてから再開しても履歴activityに入るからです.
実は特別な需要がないならば、どんなflagはすべてプラスしなくてもいいで、私の需要はプログラムがボタンを脱退するためで、アプリケーションを完全に退出するのも面倒で、多種の方法のn回のテストを経てapi level 8以下でactivityManagerを使うことしかできないことを発見しましたrestartPackage(packname)はandroid 4で閉じる.xシステムはこの方法がだめであることを発見し、公式ドキュメントもこの方法を捨ててactManagerに変更した.killBackgroundProcessesですが、各バージョンを互換化したい場合は、この方法は使用できません.その後、ホームキー機能でメインインタフェースに戻りたいのですが、方法:
テストの結果、通知欄からアプリケーションを開くと、このような終了方法はすべての履歴activityを終了することはできないので、通知欄からアプリケーションを開くのもtaskが新規に作成されたと言えるが、Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESETも私の考えの役割を果たしていません.あるいは、現在のtaskだけをクリアしました.通知欄が開いているactivityをandroid:launchMode=「singleTask」(AndroidManifest.xml)に設定したとき、終了した後、activityはすべてクリアされたようです.つまり、通知欄がアプリケーションを開いている間にtaskは新規ではありませんか?どうせ機能は私のニーズに達しているので、通知欄を開くとアプリケーションがデフォルトでtaskを新規作成するプロセスは変更できないようで、開くactivityの特性を変更するしかないようです.
まず、その理由の1つは、通知欄からアプリケーションを開くのが新しくactivityが開かれ、新しいtaskスタックが存在する可能性があります.この場合、restartpackage()メソッドを使用してアプリケーションのすべてのactivityを閉じることはできません.解決策は、通知欄からアプリケーションを開くときに元のactivityに戻るか、すべてのtaskのactivityを閉じることができます.
方法2は試したことがあるが、activityをすべて取り出す方法が分からず、taskもどのようにクリアするか分からない.方法1今考えてみると、この方法をお勧めすべきだと思います.見つけた方法の資料を先に貼ってください.
, 。
public void shownotification(String msg)
{
NotificationManager barmanager=(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
Notification notice = new Notification(android.R.drawable.stat_notify_chat," ",System.currentTimeMillis());
notice.flags=Notification.FLAG_AUTO_CANCEL;
Intent appIntent = new Intent(Intent.ACTION_MAIN);
//appIntent.setAction(Intent.ACTION_MAIN);
appIntent.addCategory(Intent.CATEGORY_LAUNCHER);
appIntent.setComponent(new ComponentName(this.getPackageName(), this.getPackageName() + "." + this.getLocalClassName()));
appIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK| Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);// ,
PendingIntent contentIntent =PendingIntent.getActivity(this, 0,appIntent,0);
notice.setLatestEventInfo(this," "," :"+msg, contentIntent);
barmanager.notify(STATUS_BAR_ID,notice);
}
,
((( : ( Run As ), 【 】 , , Activity, Activity 。
, 。 , 。)))
“ 。Intent.FLAG_ACTIVITY_CLEAR_TOP“,
また、ここでも設定したほうがいいかもしれません.
Activity , , Activity Activity, Activity。
FLAG_ACTIVITY_NEW_TASK Activity 。 Activity Task, HOME Activity, BACK Activity。 ( Notification) Task Activity, Task , FLAG_ACTIVITY_NEW_TASK Intent startActivity()。 Activity, Activity 。 :
<activity android:name="ShowMessageActivity"
android:launchMode="singleTask"></activity>
:
<activity> launchMode :
standard ( )
singleTop
singleTask
singleInstance
もっと詳しく見ると原博文はhttp://www.cnblogs.com/hanyonglu/archive/2012/04/15/2450551.html
先に貼って、明日テストを実践してから実際の実現方法を貼ってください.
ネットで探してみて、見つけた文章は難しいと言っているようで、以上の方法はテストしても無駄で、それから私は各flagマークをよくめくって、このIntentを発見しました.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORYは私の目の前を明るくしましたが、テストを経ても私は管理しているかどうか分かりません.私のニーズはそれを表示するためではなく、私のアプリケーションが閉じている間に問題に遭遇したからです.閉じてから再開しても履歴activityに入るからです.
実は特別な需要がないならば、どんなflagはすべてプラスしなくてもいいで、私の需要はプログラムがボタンを脱退するためで、アプリケーションを完全に退出するのも面倒で、多種の方法のn回のテストを経てapi level 8以下でactivityManagerを使うことしかできないことを発見しましたrestartPackage(packname)はandroid 4で閉じる.xシステムはこの方法がだめであることを発見し、公式ドキュメントもこの方法を捨ててactManagerに変更した.killBackgroundProcessesですが、各バージョンを互換化したい場合は、この方法は使用できません.その後、ホームキー機能でメインインタフェースに戻りたいのですが、方法:
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); // , activity
ntent.addCategory(Intent.CATEGORY_HOME);
startActivity(intent);
finish();
テストの結果、通知欄からアプリケーションを開くと、このような終了方法はすべての履歴activityを終了することはできないので、通知欄からアプリケーションを開くのもtaskが新規に作成されたと言えるが、Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESETも私の考えの役割を果たしていません.あるいは、現在のtaskだけをクリアしました.通知欄が開いているactivityをandroid:launchMode=「singleTask」(AndroidManifest.xml)に設定したとき、終了した後、activityはすべてクリアされたようです.つまり、通知欄がアプリケーションを開いている間にtaskは新規ではありませんか?どうせ機能は私のニーズに達しているので、通知欄を開くとアプリケーションがデフォルトでtaskを新規作成するプロセスは変更できないようで、開くactivityの特性を変更するしかないようです.