问题描述
- 求指点,Handler更新UI线程问题
-
public Handler mHandler = new Handler() {@Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); switch (msg.what) { case 0x123: one.setImageResource(imageIds[currentImageId++]); two.setImageResource(imageIds[currentImageId1++]); three.setImageResource(imageIds[currentImageId2++]); four.setImageResource(imageIds[currentImageId3++]); if (currentImageId >= imageIds.length) { currentImageId = 0; } if (currentImageId1 >= imageIds.length) { currentImageId1 = 0; } if (currentImageId2 >= imageIds.length) { currentImageId2 = 0; } if (currentImageId3 >= imageIds.length) { currentImageId3 = 0; } break; default: break; } linearLayout.invalidate(); } }; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.yaobude); initView(); } public void initView() { linearLayout = (LinearLayout)findViewById(R.id.linearlayout); one = (ImageView) findViewById(R.id.one); two = (ImageView) findViewById(R.id.two); three = (ImageView) findViewById(R.id.three); four = (ImageView) findViewById(R.id.four); one.setOnClickListener(this); two.setOnClickListener(this); three.setOnClickListener(this); four.setOnClickListener(this); imageIds = new int[]{ R.drawable.ee1,R.drawable.ee2,R.drawable.ee3,R.drawable.ee4,R.drawable.mmm2,R.drawable.mmm3 }; tt = new TimerTask() { @Override public void run() { // TODO Auto-generated method stub Message msg = new Message(); msg.what = 0x123; System.out.println("----------"+msg.what); mHandler.handleMessage(msg); } }; timer.schedule(tt, 0, period); }
代码如上,为啥还是会报不能更新ui线程的错误呢?求指点 thanks 报错语句:android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
解决方案
谢谢楼上 找到原因了 mHandler.handleMessage(msg); - -! mHandler.sendEmptyMessage(msg.what);
解决方案二:
你可以避开这个错误Thread。
用AsyncTask
代替Thread。
或者在ImageView中使用post()。
或者在activity使用runOnUiThread()。
时间: 2024-11-01 14:38:23