Androidに通知欄情報をクリックして実行中のプログラムに戻り、すべてのactivityを完全に終了させる

6094 ワード

最近、開発中のアプリケーションがホームキーで閉じた後、通知欄から再開した後、終了ボタンでアプリケーションを閉じることができないことが発見され、ネット上でnを調べた後、いくつかの肝心な原因を発見し、まだテストを実践していないので、先にメモを取った.
まず、その理由の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の特性を変更するしかないようです.