cuando utilizo Handler.dispatchMessage (msg), el handleMessage (Message msg) se ejecutará en un nuevo hilo, pero cuando utilizo Handler.sendMessage (msg), handleMessage (Message msg) se ejecutará en el hilo principal, quien puede decirme la diferencia entre ellos.La diferencia entre Handler.dispatchMessage (msg) y Handler.sendMessage (msg)
gracias!
Demostración:
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();
}
}
Salida:
04-19 11:32:10.452: INFO/MainActivity(774): Main:1 04-19 11:32:10.488: INFO/MainActivity(774): Thread:8 04-19 11:32:10.492: INFO/MainActivity(774): Handler:8&arg1=1 04-19 11:32:10.635: INFO/MainActivity(774): Handler:1&arg1=2
¿de dónde viene el objeto ** "mensaje" ** en el código anterior? – waqaslam
@Waqas desde su código 'mHandler.dispatchMessage (msg)' - es el código fuente de 'Handler.dispatchMessage' (ligeramente simplificado) – zapl
sí, pero * dispatchMessage (Mensaje de mensaje) * dice ** msg **, pero en código también usando ** mensaje ** que es a quien me concierne acerca de – waqaslam