2016-12-27 3 views
1

私はこれを理解するのに何時間も努力してきましたが、さまざまなテクニックを試しましたが、バックグラウンドでタスクを実行するようには見えません。私は私のOnClickListenerでこのコードを持って:バックグラウンドでコードを実行してスレッドを検証する

new Thread(new Runnable() { 
    public void run() { 
      //doing some work in the background here 
      Log.d(tag, "Thread: " + checkThread()); 
    } 
}).start(); 

とコードがメイン/ UIスレッドまたはバックグラウンドで実行された場合、スレッド内では、私がチェックしています。だから私はこれを持っている:

private String checkThread() { 
    if (Looper.getMainLooper().getThread() == Thread.currentThread()) { 
     return "Main"; 
    } else { 
     return "Background"; 
    } 
} 

しかし、上記は常に "メイン"を返します。私はHandlerAsyncTaskなどを試しましたが、それらのすべてが同じものを返します。

私のコードをバックグラウンドで実行し、メインスレッドでは実行されていないことをログに表示する方法については、

+0

https://developer.android.com/guide/components/services.html 貼り付けるサービスは、アプリケーションを強制終了しても背景を実行するのに役立ちます –

+1

コードをコピーして貼り付けて返す'D/MainActivity:Thread:Background' –

+0

バックグラウンドスレッドでRetrofit 2コールバックを実行していて、' onResponse'で 'checkThread()'を呼び出すはずです – Zishan

答えて

1

私の推測では、スレッド優先度のタイプをsetThreadPriorityで指定する必要があります。次のようにしてください:

new Thread(new Runnable() { 
    public void run() { 
     // moves the current Thread into the background 
     android.os.Process.setThreadPriority(
         android.os.Process.THREAD_PRIORITY_BACKGROUND); 

     // doing some work in the background here 
     Log.d(tag, "Thread: " + checkThread()); 
    } 
}).start(); 

これは返信backgroundです。

関連する問題