8-26 Android学习ing

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()方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值