前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >8-26 Android学习ing

8-26 Android学习ing

作者头像
发布2018-09-03 15:40:00
4600
发布2018-09-03 15:40:00
举报
文章被收录于专栏:WD学习记录WD学习记录

1.应用的响应性(Responsive)

在Android中,应用的响应性被活动管理器(Activity Manager)和窗口管理器(Window Manager)这两个系统服务所件事。当用户触发了输入事件(如键盘输入,点击按钮等),如果应用5秒内没有响应用户的输入事件,那么,Android灰认为该应用无响应,便弹出ANR(Application No Response)对话框

在正常情况下,Android程序会在一条单线程里运行。如果Activity要处理一件比较耗时的工作,应该交给子线程完成,否则会因为主线程被阻塞,后面的用户输入事件因没能在5秒内响应,导致应用出现ANR对话框

2.广播接收者(Broadcast Receiever)

广播接收者(Broadcast Receiever)用于接收广播Intent,广播Intent的发送时通过调用Context.sendBroadcast()  Context.sendOrderedBroadcast()来实现的。通常一个广播的Intent可以被订阅了此Intent的多个广播接收者所接收这个特性跟JMS中的Topic消息接收者类似。

3.广播接收者的响应性

在Android中,每次广播消息到来时都会创建BroadcastReceiver实例并且执行onReceive()方法,onReceive()方法执行完后,BroadcastReceiver的实例就会被销毁。当onReceive()方法在10秒内没有执行完毕,Android会认为该程序无响应,所以在BroadcastReciever里边不能做一些比较耗时的操作,否则会弹出ANR错误对话框。如果需要完成一项比较耗时的工作,应该通过发送Intent给Service,由Service来完成,这里不能使用子线程来解决,因为BroadcastReceiver的生命周期很短,子线程可能还没有结束BroadcastReceiver就先结束了。BroadcastReceiver一旦结束,此时BroadcastReceiver所在的进程很容易在系统需要内存时被优先杀死,因为它属于空进程(没有任何活动组件的进程)。如果它所在的进程被杀死,那么正在工作的子线程也会被杀死,所以采用子线程来解决是不可靠的。

4.服务---Service

Android中的服务类似于windows中的服务,服务一般没有用户操作界面,它运行于系统中不容易被用户发觉,可以使用它开发如监控之类的程序,服务的开发比较简单

第一步 :继承Service类

public class SMSService extends Service{}

第二步: 在AndroidManifest.xml文件中的<application>节点里对服务进行配置:

<service android:name=".SMSService"/>

服务不能自己运行,需要通过调用Context.startService()或Context.bindService()方法启动服务。这两个方法都可以启动Service,但是他们使用场合有所不同。使用startService()方法启动服务,访问者与服务之间没有关联,即使访问者退出了,服务仍然运行。使用bindService()方法启动服务,访问者同服务绑定在一起,访问者一旦退出,服务也就终止。

采用Context.startService()方法启动服务,只能调用Context.stopService()方法结束服务,服务结束时会调用onDestroy()方法

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014年08月26日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档