我正在编写处理程序并尝试在handlemessage方法中打印Thread名称 代码如下
public class handler extends Activity
{
EditText et;
Handler h=new Handler()
{
public void handleMessage(Message m)
{
Toast.makeText(getApplicationContext(), Thread.currentThread().getName(), Toast.LENGTH_SHORT).show();
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.handler);
et=(EditText)findViewById(R.id.handle);
Thread t=new Thread()
{
public void run()
{
int i=0;
while(i<10)
{
try
{
Thread.sleep(1000);
}catch(Exception ep){}
i++;
h.dispatchMessage(h.obtainMessage());
}
}
};
t.start();
}
}
然而,应用程序崩溃了。如果我使用log.v来打印它的工作线程名称。请更新它为什么会发生。 谢谢 tejinder
答案 0 :(得分:1)
而不是使用这句话:
h.dispatchMessage(h.obtainMessage());
使用这个:
h.sendMessage(h.obtainMessage());
崩溃是因为你不能从MAIN以外的任何线程对UI做任何修改,通过调用dispatchMessage就像从你当前调用它的线程直接调用处理程序的handleMessage,在这种情况下你是在工作线程中执行此操作,但是通过调用h.sendMessage(h.obtainMessage());
,您强制处理程序使用它所附加的线程来执行handleMessage,在您的情况下是MAIN线程......
问候!