Android service 服务
Posted chinabinlang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android service 服务相关的知识,希望对你有一定的参考价值。
android的服务:
1:已启动方式:
startService()和bindService();
startService:启动后,如果Activity关闭了,服务依然运行,除非stopService;
bindService:创建开启服务器,但是在程序关闭的时候,会自动关闭服务;
通过ServiceConnectionjava接口获取service的IBinder接口;
2:控制服务(绑定服务);
(1)但是上述两个方式都是通过Intent创建启动服务的,没有通过new,所以没有直接控制service的对象;
上述可以通过bindService获取IBinder接口后,控制service,但是这也比较麻烦,这样需要写一个新的IBinder接口,实现很多函数控制service,然后外部相关类通过这个接口间接的控制服务;
(2)我们可以理解一个service就是一个单例模式的设计,不论通过startService还是通过 bindService创建启动函数,最终都都只有一个内存对象创建,所以这里我们可以改变思路,直接获取service的对象;
就是通过一个静态变量,和一个静态函数;在构造函数中直接获取this对象;
示例:
class MyBinder extends Binder { } public class MyService extends Service { public MyService() { m_serviceObj = this; Log.w("", "MyService: 构造函数"); } private static MyService m_serviceObj = null; public static MyService GetInstance() { return m_serviceObj; } public void set_dbg_text( String str ) { Log.w("", "set_dbg_text"); Log.w("", "set_dbg_text: " + str ); } int m_nCount = 0; @Override public IBinder onBind(Intent intent) { Log.w("", "MyService-onBind"); // return null; m_serviceObj = this; return new MyBinder(); } }
(3): 上述可以在同一个进程总中,也就事同一个工程中,直接简单的应用;
不同进程间访问service,可以通过AIDL;
AIDL文件语法和java接口语法很像,build工程后,会根据aidl文件生成相应的Java接口的java文件,这个接口文件可以理解为IBinder接口的实现,所以可以在服务中知己诶应用,然后别的应用程序可以根据AIDL文件(这里就C/C++的头文件)和service绑定了;
在AndroidStudio中还是比较好实现的;
(4):如果进程间的简单通信,也可以通过 广播消息 Intent 的 Bundle参数,这样的方式进行;
当然进程间通信的方式很多;
转几篇文章:
深入理解Android的startservice和bindservice
以上是关于Android service 服务的主要内容,如果未能解决你的问题,请参考以下文章
Android Service(服务)/进程/线程—服务(Service)