android刷新UI的几种方式总结

首先,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。




郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。