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