service的生命周期:
需求:既要保证服务长期在后台运行,又想去调用服务里面的方法
技巧:1.先开启服务 2.绑定服务
音乐播放器
4.3 添加权限
进程就是正在进行中的程序,它是系统分配资源的基本单位,线程就是一次单一顺序的执行控制流, 一个进程里面可以有多个线程,一般情况下,一个应用程序会对应一个进程,关闭应用就是关闭了所有的界面,关闭所有的activity,应用程序的进程是不会关闭掉的,仍然在后台长期的运行,当系统内存不够用的时候会优先关闭空进程和后台进程。
采用一组组策略,帮助我们自动的管理进程,进程按照优先级分为不同的等级:
Messenger封装了Binder和Handler,有了Handler,Messenger就可以发送消息了,有了Binder,Messanger就可以远程通信了
结果:客户端拿到了服务端的信使【使用binder构造】,服务端拿到了客户端信使【使用消息携带】,然后就可以互发信息了
服务端:
客户端:
客户端和服务端通信协议解决了两个问题,服务端和客户端约定了方法参数列表顺序约定了方法的ID标识
服务端:
客户端:
IMyService.aidl
Student.java
总结:
1,6简单粗暴可以保证完全存活
4,5常用的方案
2,3比较轻量级
将Service设置为前台服务:(startForeground(int, Notification))
编码通过双服务实现服务长存?
https://www.cnblogs.com/zhujiabin/p/6073529.html
Android有四大组件:Activity、Service、Broadcast Receiver、Content Provider在这些组件之间的通讯中,主要是由Intent协助完成的.
Intent负责对应用中一次 *** 作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用.
因此,Intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦.
例如,在一个联系人维护的应用中,当我们在一个联系人列表屏幕(假设对应的Activity为listActivity)上,点击某个联系人后,希望能够跳出此联系人的详细信息屏幕(假设对应的Activity为detailActivity)
为了实现这个目的,listActivity需要构造一个 Intent,这个Intent用于告诉系统,我们要做“查看”动作,此动作对应的查看对象是“某联系人”,然后调用startActivity (Intent intent),
将构造的Intent传入,系统会根据此Intent中的描述,到ManiFest中找到满足此Intent要求的Activity,系统会调用找到的 Activity,即为detailActivity,最终传入Intent,detailActivity则会根据此Intent中的描述,执行相应的 *** 作.
如果您认可我的答案,请点击下面的“选为满意回答”按钮,
生命周期如下:
两种启动方式
第一种方式: startService()
通过startService启动后,service会一直无限期运行下去,只有外部调用了stopService()或stopSelf()方法时,该Service才会停止运行并销毁。
当第一次调用的时候,方法顺序是:
构造方法——oncreate()——onStartCommand()
当第二次被调用的时候,直接调用onStartCommand()
结束:stopService():——>onDestory()
第二种方式:bindService()
bindService启动的服务和调用者之间是典型的client-server模式。调用者是client,service则是server端。service只有一个,但绑定到service上面的client可以有一个或很多个。这里所提到的client指的是组件,比如某个Activity。
client可以通过IBinder接口获取Service实例,从而实现在client端直接调用Service中的方法以实现灵活交互,这在通过startService方法启动中是无法实现的。
bindService启动服务的生命周期与其绑定的client息息相关。client也可以明确调用Context的unbindService()方法与Service解除绑定。当所有的client与service解除绑定的时候,才会调用onUnbind,然后 Service会自行销毁。
第一次调用:
构造方法——oncreate()——onBind()——onServiceConnected()
结束:unbindService():如果当前有Activity与Service相连——>onUnbind()——>onDestory()
Intentservice
IntentService 是继承于 Service 并处理异步请求的一个类,在 IntentService 内有一个工作线程来处理耗时 *** 作,启动 IntentService 的方式和启动传统 Service 一样,同时,当任务执行完后,IntentService 会自动停止,而不需要我们去手动控制。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)