スワイプでアプリをスウィッチャーから削除すると、驚くべき動作に気付きました。アプリにはサービスがあります。アプリケーションが「強制終了」されると、サービスから開始されたスレッドは実行を継続し、他のスレッドは終了します。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);
}
実は 'Service'のUI Thread''上のアンドロイド実行します( 'IntentService'を使用しない限り)で –
とAndroidハンドラには、UIスレッドを確認するための 'ThreadLocal'が含まれています。 –
可能であれば、onCreate()のコードを適切に投稿してください。 –