quando utilizzo Handler.dispatchMessage (msg), il handleMessage (Message msg) verrà eseguito sul nuovo thread, ma quando utilizzo Handler.sendMessage (msg), handleMessage (Message msg) verrà eseguito sul thread principale, che può dirmi la differenza tra loro.La differenza tra Handler.dispatchMessage (msg) e Handler.sendMessage (msg)
grazie!
Demo:
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();
}
}
uscita:
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
da dove viene l'oggetto ** "messaggio" ** proviene dal codice precedente? – waqaslam
@Waqas dal codice 'mHandler.dispatchMessage (msg)' - è il codice sorgente per 'Handler.dispatchMessage' (leggermente semplificato) – zapl
sì ma * dispatchMessage (messaggio msg) * dice ** msg **, ma nel codice è anche utilizzando ** messaggio **, di chi sono interessato a circa – waqaslam