Service详解

Service详解

1.后台运行,没有界面与activity相对。

2.Service更不容被回收,相对于全局对象或后台activity来说。

 

Service生命周期:

使用startService启动服务

service没有启动时:

onCreate()- >onStartCommand()

service已经启动时:

onStartCommand()

对应使用stopService()结束服务:

1.只有在没有人连到该服务时才会执行。

onDestroy()

 

使用bindService连接服务:

service没有启动时:

   onCreate()->onBind()

service已经启动时:

  1.必须是第一连接此服务才

  onbind

对应使用unbindService断开连接

   onUnbind()

unbindService只有在,1.service不是startSevice启动的或者是startSevice启动已经调用了stopService,2.并且没人没有人连到该服务才会执行

   ondestroy()

 

startService的目的是启动service

bindService目的获得service的引用。

 

starService代码

Intent startIntent = new Intent(this, MyService.class);
startService(startIntent);

bindService代码 

Intent intent = new Intent(MainActivity.this, MyService.class);
bindService(intent, connection, BIND_AUTO_CREATE);

private ServiceConnection connection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            Log.e(TAG, "onServiceConnected()");
            myBinder = (MyService.MyBinder) service;
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {
            Log.e(TAG, "onServiceDisconnected()");

        }
};
	

public class MyService extends Service {
    

    @Override
    public IBinder onBind(Intent intent) {
        Log.e(TAG, "onBind()");
        return new MyBinder();
    }

    public class MyBinder extends Binder {
    }
}
 

 aidl:Android Interface Definition Language

 

package com.lina.android.activitydemo;

interface MyAIDL {
    void fun();
}
 
 
 
public class MyService extends Service {
    public static final String TAG = "MyService";

    @Override
    public IBinder onBind(Intent intent) {
        Log.e(TAG, "onBind()");
        return new MyBinder();

    }

    public class MyBinder extends MyAIDL.Stub {
        @Override
        public void fun() throws RemoteException {
        }
    }
}

<service android:name=".MyService">
    <intent-filter>
        <action android:name="lina123" />
    </intent-filter>
</service>

------------------------------------------------------------------
package com.lina.android.activitydemo;

interface MyAIDL {
    void fun();
}

Intent intent = new Intent("lina123");
bindService(intent, connection, BIND_AUTO_CREATE);

public ServiceConnection connection = new ServiceConnection() {
    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
        MyAIDL myAIDL = MyAIDL.Stub.asInterface(service);
        try {
            myAIDL.fun();
        } catch (RemoteException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onServiceDisconnected(ComponentName name) {

    }
};

 

Activity与Service通讯

activty主动把数据传给service可以通过广播,重要是是bindservice。

service主动把数据传给activity可以通过广播。

 

 

 

猜你喜欢

转载自jishudaren.iteye.com/blog/2298884