2016-09-12 1 views
5

スワイプでアプリをスウィッチャーから削除すると、驚くべき動作に気付きました。アプリにはサービスがあります。アプリケーションが「強制終了」されると、サービスから開始されたスレッドは実行を継続し、他のスレッドは終了します。recentsからタスクを削除するとどうなりますか?

本当に驚きだと、システムは、スレッドが、私はこのようなスレッドの原点を難読化しようとした場合でも、サービスから開始されたかを決定することができるということです。サービスののonCreate()メソッドで

  • 、実行可能を投稿メインスレッドハンドラに渡します。
  • runnableは新しいスレッドを開始し、recentsからの削除から生き残ります。

全く同じハンドラに同じ実行可能ファイルを書き込むが、アクティビティから投稿した場合、そのスレッドは生き残りません。システムはどのようにして知ることができますか?それはどういうわけか、どのスレッドがrunnableから投稿されたのかを追跡していますか?

編集:要求されたとして、のonCreate()メソッド:

@Override 
public void onCreate() { 
    super.onCreate(); 

    new Handler(Looper.getMainLooper()).postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      new Thread(){ 
       @Override 
       public void run() { 
        while (true) { 
         System.out.println("hello from thread"); 
         try { 
          Thread.sleep(1000); 
         } catch (InterruptedException e1) { 
          e1.printStackTrace(); 
         } 
        } 
       } 
      }.start(); 
     } 
    }, 1000); 
} 
+0

実は 'Service'のUI Thread''上のアンドロイド実行します( 'IntentService'を使用しない限り)で –

+0

とAndroidハンドラには、UIスレッドを確認するための 'ThreadLocal'が含まれています。 –

+0

可能であれば、onCreate()のコードを適切に投稿してください。 –

答えて

2

が最後に何が起こるかが分かりました。このシステムはサービス以外のスレッドを選択的に削除せず、アプリケーション全体を終了させて​​からサービスを再開するので、サービスのスレッドは変更されていないようです。

+0

プロセスを実行している場合(例えばファイルのコピー)、そのファイルは失われますか? –

+0

@MoshErsanファイルは存続すると思いますが、不完全なだけです。 – fhucho

+0

これは、最近のアプリをクリアするとプロセスが壊れることを意味します。 –

1

ちょうどこれにいくつかの光を投げたい。

Androidコンポーネントは、作成しなかったスレッドを認識しません。したがって、IntentServiceは、onHandleIntent()の使用のために作成したスレッドを処理しますが、通常のサービスは自分がフォークするスレッドには何の注意も払わないでしょう。

サービスが破棄されると、Androidがプロセスを終了するまで、サービスが破棄されたスレッドはすべて実行され続けます。再び、サービスは、あなたが自分自身をフォークスレッドの何も知らない - サービスとは何の関係もありません

あなたのスレッドが予期せず停止している場合は、。参考文献から

+0

私はこのことを知っています。そのため、その動作はとても混乱しています。 – fhucho

0

それが何度も背中を押すのと同じ方法でアプリを再度行い終了します。時にはバックグラウンドプロセスも終了することがありますが、時にはそうではありません。

最近のタスクでエントリを削除すると、プロセスに存在するバックグラウンドプロセスはすべて終了します。サービスを直接停止させることはありませんが、タスクを停止したことを知るためのAPIがあり、停止する必要があるかどうかを判断するために削除されました。これは、例えば、電子メールアプリケーションの最近のタスクを削除しても、電子メールのチェックを停止させないようにするためです。

アプリを完全に停止したい場合は、最近のタスクを長押ししてアプリ情報に移動し、そこで強制停止してください。強制停止はアプリケーションの完全な殺しです。すべてのプロセスが強制終了され、すべてのサービスが停止し、すべての通知が削除され、すべてのアラームが削除されます。明示的に要求されるまで、アプリケーションは再度起動できません。

基本的には、アプリが決めるのは、アプリがどのようにコード化されたかによって決まります。各アプリの動作を確認するには、[設定]> [アプリ]> [実行中]の画面を確認する価値があります

詳細については、下のrefrenceリンクを確認してください。

Refrenceリンク: -

http://lifehacker.com/what-happens-when-you-remove-an-app-from-androids-mult-1179868228

http://www.howtogeek.com/169549/what-exactly-happens-when-you-swipe-an-android-app-from-the-recent-apps-list/

https://plus.google.com/+DianneHackborn/posts/GfwRYCC42uX

関連する問題