当前位置:首页 » 安卓系统 » android项目总结

android项目总结

发布时间: 2025-09-07 09:08:48

㈠ android通过Handler使子线程更新UI

在Android项目中经常有碰到这样的问题,在子线程中完成耗时操作之后要更新UI,下面就自己经历的一些项目总结一下更新的方法。

一. 引言

首先来看一下android中消息机制:

专业术语:

Message:消息,其中包含了消息ID,消息处理对象以及处理的数据等,由MessageQueue统一列队,终由Handler处理。
Handler:处理者,负责Message的发送及处理。使用Handler时,需要实现handleMessage(Message msg)方法来对特定的Message进行处理,例如更新UI等。
MessageQueue:消息队列,用来存放Handler发送过来的消息,并按照FIFO规则执行。当然,存放Message并非实际意义的保存,而是将Message以链表的方式串联起来的,等待Looper的抽取。
Looper:消息泵,不断地从MessageQueue中抽取Message执行。因此,一个MessageQueue需要一个Looper。
Thread:线程,负责调度整个消息循环,即消息循环的执行场所。

二. 方法

1. 用Handler

(1)主线程中定义Handler:

java代码:

[java]view plain

HandlermHandler=newHandler(){

@Override

publicvoidhandleMessage(Messagemsg){

super.handleMessage(msg);

switch(msg.what){

case0:

<spanstyle="color:#009900;">//完成主界面更新,拿到数据</span>

Stringdata=(String)msg.obj;

updateWeather();

textView.setText(data);

break;

default:

break;

}

}

};

(2)子线程发消息,通知Handler完成UI更新:

java代码:

privatevoipdateWeather(){

newThread(newRunnable(){

@Override

publicvoidrun(){

<spanstyle="color:#009900;">//耗时操作,完成之后发送消息给Handler,完成UI更新;</span>

mHandler.sendEmptyMessage(0);

<spanstyle="color:#33cc00;">//需要数据传递,用下面方法;</span>

Messagemsg=newMessage();

msg.obj="数据";<spanstyle="color:#33cc00;">//可以是基本类型,可以是对象,可以是List、map等;</span>

mHandler.sendMessage(msg);

}

}).start();

}

注意:Handler对象必须定义在主线程中,如果是多个类直接互相调用,就不是很方便,需要传递content对象或通过接口调用。

2.用Activity对象的runOnUiThread方法更新

在子线程中通过runOnUiThread()方法更新UI:

java代码:

newThread(){

publicvoidrun(){

<spanstyle="color:#009900;">//这儿是耗时操作,完成之后更新UI;</span>

runOnUiThread(newRunnable(){

@Override

publicvoidrun(){

<spanstyle="color:#009900;">//更新UI</span>

imageView.setImageBitmap(bitmap);

}

});

}

}.start();

如果在非上下文类中,可以通过传递上下文实现调用:

java代码:

Activityactivity=(Activity)imageView.getContext();

activity.runOnUiThread(newRunnable(){

@Override

publicvoidrun(){

imageView.setImageBitmap(bitmap);

}

});

注意:这种方法使用比较灵活,但如果Thread定义在其他地方,需要传递Activity对象。


3.
View.post(Runnable r)

java代码:

imageView.post(newRunnable(){

@Override

publicvoidrun(){

imageView.setImageBitmap(bitmap);

}

});

这种方法更简单,但需要传递要更新的View过去。

总结:UI的更新必须在主线程中完成,所以不管上述那种方法,都是将更新UI的消息发送到了主线程的消息对象,让主线程做处理。

㈡ 总结怎样读别人Android项目源代码

对于读项目源代码来说,可能对大多数人是件困难的事。首先,第一个障碍:看到项目,就已经放弃! 如果有十个人,可能有5个人以上会是上面这种情况,分析其想法:这么多的代码,我要怎么读啊!我要读好久啊!算了,还是看小Demo吧,所以这样,他们也就只是把这个项目导入到eclipse中,点了几下鼠标,然后就没有下文了。 解决办法:其实他们终止的原因很简单,就是嫌麻烦,那好吧,告诉你,这点麻烦都能对你造成影响,其实你的开发之路也可以终止了。任何东西,你要学到它,你就必须花时间、花精力、还要有面对困难的准备。想一步登天,有可能,除非你是天才,但毕竟天才太少了!对于开发,不是学习1+1,所以,先摆正心态吧,那要具备怎样的心态呢?那就是:有面对困难的准备,也有解决苦难的信心。 心态问题解决了,那就是读代码的技巧了,很多人拿到一个项目不知道怎么入手,干脆就胡乱的一通看,看到一定时候发现,实在进行不下去了,又开始重新梳理自己的思路。这样是很浪费时间的,其实对于读一个项目,最好按照以下步骤进行( 个人意见,仅供参考 ): 1、使用这个应用或者游戏,直到熟悉它的使用流程和功能 2、根据自己的体验分析代码实现(整体) 3、如果有条件和原作者请教项目思路 4、从最先启动的Activity开始,弄懂每个Activity功能如何实现以及它的布局实现 5、遇到不懂的代码,首先找搜索引擎(一般都能解决)。还不行就可以请教他人了 6、对新学到的知识点,一定要总结下来,并且定期的去回顾 7、最重要的一点: 我认为要自己动手写,那怕是重新写一遍这个项目,或者自己设计一个类似的,再或者只写这个项目中的一部分。 为什么要自己动手呢?大家都知道coder这个东西,那怕你理论学得再好,不动手,那也是毫无意义的!所以,动手写一下,你会遇到问题,你就会解决问题,这样,你才能学到更多。这就是经验·······

热点内容
松下编程入门 发布:2025-09-07 14:43:14 浏览:714
淘宝采集php 发布:2025-09-07 14:43:12 浏览:614
外国人财富密码什么意思 发布:2025-09-07 14:38:43 浏览:288
路由器配置备份文件怎么查看 发布:2025-09-07 14:26:11 浏览:983
sql权限控制 发布:2025-09-07 14:03:24 浏览:731
python开发面试题 发布:2025-09-07 14:02:31 浏览:206
存储项目实施方案 发布:2025-09-07 13:51:56 浏览:973
errorreportingphp 发布:2025-09-07 13:46:47 浏览:595
php判断字符串的编码 发布:2025-09-07 13:20:02 浏览:189
一个服务器带动多少电脑 发布:2025-09-07 13:02:49 浏览:835