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。

时间: 2024-08-01 00:44:29

android刷新UI的几种方式总结的相关文章

Android 更新UI的几种方式

1.Activity的 runOnUiThread textView = (TextView) findViewById( R.id.tv ); new Thread(new Runnable() { @Override public void run() { runOnUiThread(new Runnable() { @Override public void run() { textView.setText( "更新UI了"); } }); } }).start(); andro

Android更新UI的四种方式

前言 相信初学Android开发的朋友来说,应该都会遇到一个问题,我们开启了一个线程,在这个线程里面我们进行了更新UI的操作,也许是在TextView显示了一行文字,也许是改变了ImageView显示的图片,虽然只是看似简单并且正确的操作,但是Android系统让你的程序光荣的崩溃了,并且你还不知道为什么错,这才是最痛苦的,曾经深受这种痛苦的我,为了不再让这种痛苦蔓延下去,我决定把更新UI的几种方法给大家好好说说,让大家在Thread的run方法中可以随心所欲的更新UI,再也不用痛苦了. 实现

Android更新UI的五种方式

handler.post activity.runOnUiThread view.post handler+Thread AsyncTask 例子: package com.chao.updateui; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http

Android攻城狮 Android中更新UI的几种方式

Android中更新UI的几种方式: 1. Activity 的 runOnUiThread() 2. Handler 的 post() 3. Handler 的 sendMessage() 4. View 的 post() 1 public class FiveActivity extends Activity { 2 3 private TextView textView; 4 5 private Handler handler = new Handler() { 6 public void

Android——数据存储(四种方式之二)读写SD卡

Android--数据存储(四种方式) 1.SharedPrefereces 只能保存一些简单的数轻量级.XML  存储文件名, 数据保存在data/data/basepackage/shared_prefs/myopt.xml中    实例-收藏-记住密码自动登录 //一种轻量级的数据存储方式//通过KEY 存入数据--putxxxx(key,value) 取出数据--getxxxx(key  default) 2.读写SD卡  SD的根目录  适用于数据流读写 实现步骤:加入读写SD卡权限

探讨android更新UI的几种方法

作为IT新手,总以为只要有时间,有精力,什么东西都能做出来.这种念头我也有过,但很快就熄灭了,因为现实是残酷的,就算一开始的时间和精力非常充足,也会随着项目的推进而逐步消磨殆尽.我们会发现,自己越来越消极怠工,只是在无意义的敲代码,敲的还是网上抄来的代码,如果不行,继续找. 这就是项目进度没有规划好而导致的. 最近在做有关蓝牙的项目,一开始的进度都安排得很顺利,但是因为测试需要两部手机,而且还要是android手机,暑假已经开始了,同学们都回家了,加上我手机的蓝牙坏了,导致我的进度严重被打乱!而

Android——数据存储(四种方式之一)SharedPrefereces

Android--数据存储(四种方式) 1.SharedPrefereces   轻量级.XML  存储文件名,数据保存在data/data/basepackage/shared_prefs/myopt.xml中   实例-收藏-记住密码自动登录 //一种轻量级的数据存储方式//通过KEY 存入数据--putxxxx(key,value) 取出数据--getxxxx(key  default)   2.读写SD卡  SD的根目录  适用于数据流读写 3.SQLite  轻量级.dp文件多用于手机

JS刷新窗口的几种方式

浮层内嵌iframe及frame集合窗口,刷新父页面的多种方法 <script language=JavaScript> parent.location.reload(); </script> <script language=JavaScript> parent.location.reload(); </script> 弹出子页面 <script language=JavaScript> window.opener.location.reloa

Android 更新UI的两种方法——handler和runOnUiThread() - $firecat的代码足迹$ - 博客频道 - CSDN.NET

文章来源:http://www.2cto.com/kf/201302/190591.html Android 更新UI的两种方法——handler和runOnUiThread() 在Android开发过程中,常需要更新界面的UI.而更新UI是要主线程来更新的,即UI线程更新.如果在主线线程之外的线程中直接更新页面显示常会报错.抛出异常:android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread th