美文网首页
Android Service介绍

Android Service介绍

作者: rayel | 来源:发表于2018-03-19 18:40 被阅读0次

Service作为Android四大组件之一,在Android系统中有着居住轻重的位置。
Service有两种启动方式,第一种就是通过Context.startService来启动,此时的Service为启动状态的Service,第二种通过bindService启动。
对于第一种情况,在通过StartService启动之后执行onCreate-onCommand,这个Service便会一直运行下去,直到调用了Context.stopService或者Service自身由于任务完成调用了selfDestroy。而对于第二种情况的,Service在被第一个宿主绑定的时候启动,依次执行onCreate-onBind,多个宿主可以同时绑定一个Service,直到最后一个宿主unbind该Service之后该Service才会被Destroy。
下面为通过第一种情况来实现的Service,即启动状态的Service:

public class StartableService extends Service {
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
}

直接继承Service,实现onBind方法,这边是一个最简单的Service,这个Service什么都没有做。但这样的Service是无法被启动的,我们还需要再Manifest文件中进行Service的申明,就像申明Activity一样:

<service android:name=".StartableService"/>
如此一来这个Service便可以被启动了 StartableActivity
点击“启动StartableService” Logcat 我们可以看到onCreate和onStratCommand依次被调用。再点击“停止StartableService”可以看到onDestroy的被调用 image.png 这就是一个简单的Service。
接下来我们通过客户端与Service进行通信,Service代码修改为
public class StartableService extends Service {
    String TAG = getClass().getSimpleName();
    MyBinder mBinder = new MyBinder();
    public class MyBinder extends Binder{
        public StartableService getService(){
            return StartableService.this;
        }
    }
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return mBinder;
    }
...

客户端代码


public class StartableServiceActivity extends Activity {
    private Intent mIntent;
    StartableService service;
    ServiceConnection conn = new ServiceConnection(){
        @Override
        public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
            StartableService.MyBinder binder = (StartableService.MyBinder) iBinder;
            service = binder.getService();
        }

        @Override
        public void onServiceDisconnected(ComponentName componentName) {

        }
    };
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_startable_service);

        mIntent = new Intent(this,StartableService.class);
        findViewById(R.id.btnStartService).setOnClickListener(v->{
            bindService(mIntent,conn,Service.BIND_AUTO_CREATE);
        });
        findViewById(R.id.btnStopService).setOnClickListener(v->{
            if (service!=null) {
                service = null;
                unbindService(conn);
            }
        });

        findViewById(R.id.btnEvokeService).setOnClickListener(v->{
            if (service!=null){
                Toast.makeText(StartableServiceActivity.this,service.getInfo(),Toast.LENGTH_LONG).show();
            }
        });
    }
}
image.png

相关文章

网友评论

      本文标题:Android Service介绍

      本文链接:https://www.haomeiwen.com/subject/wubpqftx.html