标签:android四大组件 service 远程调用服务方法 服务生命周期 服务的两种开启方式
服务,作为Android四大组件之一,必然是重点。我们今天就来讲解一下有关服务的生命周期、两种开启方式以及相关用法。
服务有两种开启方式,一种是正常开启, 一种是以绑定的方式开启,当然,这两种方式可以组成混合开启。
public class TestService extends Service { @Override public IBinder onBind(Intent arg0) { System.out.println("onBind"); return new Mybinder(); } @Override public void onCreate() { System.out.println("create"); super.onCreate(); } @Override public void onDestroy() { System.out.println("onDestroy"); super.onDestroy(); } @Override @Deprecated public void onStart(Intent intent, int startId) { System.out.println("start"); super.onStart(intent, startId); } @Override public int onStartCommand(Intent intent, int flags, int startId) { System.out.println("onStartCommand"); return super.onStartCommand(intent, flags, startId); } @Override public boolean onUnbind(Intent intent) { System.out.println("onUnbind"); return super.onUnbind(intent); } class Mybinder extends Binder implements IService { public void method() { System.out.println("serviceMethod"); } } }
<service android:name="com.example.servicedemo.TestService" > </service>
intent = new Intent(getBaseContext(), TestService.class); startService(intent);
stopService(intent);
class Mybinder extends Binder implements IService { public void method() { System.out.println("serviceMethod"); } }
@Override public IBinder onBind(Intent arg0) { System.out.println("onBind"); return new Mybinder(); }
class Mycon implements ServiceConnection { @Override public void onServiceConnected(ComponentName arg0, IBinder binder) { Iservice = (IService) binder; } @Override public void onServiceDisconnected(ComponentName arg0) { } }
intent = new Intent(getBaseContext(), TestService.class); conn = new Mycon(); bindService(intent, conn, BIND_AUTO_CREATE);当这样绑定服务后,服务的生命周期执行是这样的:onCreate-->onBind,不会执行onStartCommand方法,拿到代理类后,我们可以执行服务里的方法了。
findViewById(R.id.test).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //startService(intent); Iservice.method(); } });这样,就调用了服务里的方法。
unbindService(conn);执行这行代码,就可以解绑服务了。执行的生命周期函是:onUnBind-->onDestory
intent = new Intent(getBaseContext(), TestService.class); startService(intent); conn = new Mycon(); bindService(intent, conn, BIND_AUTO_CREATE);
unbindService(conn); stopService(intent); conn=null; intent=null;
package com.example.servicedemo; interface IService { void method(); }
class Mybinder extends IService.Stub { public void method() { System.out.println("serviceDemomethod"); } }将之前的接口文件修改之后,我们直接继承接口文件自动生成的.Stub类即可
<service android:name="com.example.servicedemo.TestService" > <intent-filter> <action android:name="com.example.servicedemo.TestService.action" /> </intent-filter> </service>在绑定服务之前,需要重写一下代理接口实现类,这里不再采用强制转换了。
class Mycon implements ServiceConnection { @Override public void onServiceConnected(ComponentName arg0, IBinder binder) { Iservice = IService.Stub.asInterface(binder); } @Override public void onServiceDisconnected(ComponentName arg0) { } }
<span style="white-space:pre"> </span>Intent intent = new Intent(); intent.setAction("com.example.servicedemo.TestService.action"); bindService(intent, new Mycon(), BIND_AUTO_CREATE); findViewById(R.id.test).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { try { Iservice.method(); } catch (RemoteException e) { e.printStackTrace(); } } });
标签:android四大组件 service 远程调用服务方法 服务生命周期 服务的两种开启方式
原文地址:http://blog.csdn.net/victorfreedom/article/details/43617503