首先,android的UI刷新是在主线程(UI线程)中完成的。四大组件中,activity和service运行在主线程中。现在总结自己在项目中常用到的UI刷新方式。
第一,利用子线程发消息刷新UI。
子线程负责处理UI需要的数据,然后发消息到主线程来刷新UI。代码结构如下:
new Thread(new Runnable() { @Override public void run() { Person person=new Person(); person.setName(mName.getText().toString().trim()); person.setPhone(mPhone.getText().toString().trim()); Log.i("person",person.toString()); DatabaseInfoFactory.getPersonDao(mContext).addPerson(person); Looper.prepare(); Message msg=Message.obtain(); msg.what=0x123456; handler.sendMessage(msg); Looper.loop(); } }).start();
主线程中:
private Handler mHandler=new Handler(){ @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); if(msg.what==0x123456||msg.what==0x123){ fillData(); setListener(); } } };
new AsyncTask<Void,Void,Void>() { @Override protected void onPostExecute(Void result) { if(mAdapter==null){ mAdapter=new LeaveInfoAdapter(); //设置数据适配器 mLVleaveInfos.setAdapter(mAdapter); Log.i("测试", "异步任务显示后台获得数据库数据"); } else { mAdapter.notifyDataSetChanged(); } super.onPostExecute(result); } @Override protected Void doInBackground(Void... params) { //获得要显示的数据 mleaveInfos=mLeaveInfosDao.findAll(); if (mleaveInfos==null) { Toast.makeText(HomeActivity.this,"请假数据不存在或是已经清除!", 500).show(); } Log.i("测试", "异步任务后台获得数据库数据"+mleaveInfos.size()); return null; } }.execute();
第三,利用配置文件+activity的生命周期方法刷新UI。
原文地址:http://blog.csdn.net/u014600432/article/details/44002643