码迷,mamicode.com
首页 > 移动开发 > 详细

android刷新UI的几种方式总结

时间:2015-03-01 15:48:00      阅读:362      评论:0      收藏:0      [点我收藏+]

标签:多线程   android   

首先,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();
		}
		
		
	}
	};

第二,利用异步任务更新UI。代码结构如下:

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。




android刷新UI的几种方式总结

标签:多线程   android   

原文地址:http://blog.csdn.net/u014600432/article/details/44002643

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!