Android四大组件之Service详解

Android四大组件之Service详解,第1张

在前台不可见,但是承担大部分数据处理工作(劳模),它和Activity的地位是并列的,区别在于:Activity运行与前台,Service运行于后台,没有图形用户界面,通常他为其他的组件提供后台服务或监控其他组件的运行状态。

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 会自动停止,而不需要我们去手动控制。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/6088245.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-14
下一篇 2023-03-14

发表评论

登录后才能评论

评论列表(0条)

保存