を使用するHandler.dispatchMessage(msg)
と、handleMessage(Message msg)
は新しいスレッドで実行されますが、を使用するHandler.sendMessage(msg)
と、handleMessage(Message msg)
はメインスレッドで実行されます。誰が私にそれらの違いを教えてくれますか?
ありがとう!
デモ:
public class MainActivity extends Activity
{
private String TAG = "MainActivity";
private Handler mHandler = new Handler()
{
@Override
public void handleMessage(Message msg)
{
Log.i(TAG, "Handler:" + Thread.currentThread().getId() + " & arg1=" + msg.arg1);
super.handleMessage(msg);
}
};
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.i(TAG, "Main:" + Thread.currentThread().getId());
testMethod();
}
private void testMethod()
{
Thread thread = new Thread()
{
@Override
public void run()
{
Log.i(TAG, "Thread:" + Thread.currentThread().getId());
Message msg = mHandler.obtainMessage();
msg.arg1 = 1;
mHandler.dispatchMessage(msg);
Message msg2 = mHandler.obtainMessage();
msg2.arg1 = 2;
mHandler.sendMessage(msg2);
}
};
thread.start();
}
}
出力:
04-19 11:32:10.452:INFO / MainActivity(774):Main:1 04-19 11:32:10.488:INFO / MainActivity(774):スレッド:8 04-19 11:32:10.492:INFO / MainActivity(774):ハンドラー:8&arg1 = 1 04-19 11:32:10.635:INFO / MainActivity(774):ハンドラー:1&arg1 = 2