前者我们必须通过Activity调用onStop来关闭service,如果Activity不管他,小service会一直运行下去,我们希望的是将Activity与Service绑定,实现关闭Activity同时关闭service。
这里需要一个:
public ServiceConnection connect=new ServiceConnection(){
@Override
public void onServiceConnected(ComponentName arg0, IBinder service) {
// TODO Auto-generated method stub
try {
System.out.println("###ServiceConnection Sucess,service is"+service.getInterfaceDescriptor());
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
来管理绑定和解除绑定
现在我们定义service代码:
public class MyService extends Service{ private IBinder mybinder=new IBinder(){ //取得接口描述信息 public String getInterfaceDescriptor() throws RemoteException { // TODO Auto-generated method stub return "MyService.class";//返回service类名称 } @Override public void dump(FileDescriptor arg0, String[] arg1) throws RemoteException { // TODO Auto-generated method stub } @Override public void dumpAsync(FileDescriptor arg0, String[] arg1) throws RemoteException { // TODO Auto-generated method stub } @Override public boolean isBinderAlive() { // TODO Auto-generated method stub return false; } @Override public void linkToDeath(DeathRecipient arg0, int arg1) throws RemoteException { // TODO Auto-generated method stub } @Override public boolean pingBinder() { // TODO Auto-generated method stub return false; } @Override public IInterface queryLocalInterface(String arg0) { // TODO Auto-generated method stub return null; } @Override public boolean transact(int arg0, Parcel arg1, Parcel arg2, int arg3) throws RemoteException { // TODO Auto-generated method stub return false; } @Override public boolean unlinkToDeath(DeathRecipient arg0, int arg1) { // TODO Auto-generated method stub return false; } }; //绑定时触发 public IBinder onBind(Intent intent) { // TODO Auto-generated method stub System.out.println("service:onBind Intent"+intent); return mybinder; } //重新绑定时触发 public void onRebind(Intent intent) { // TODO Auto-generated method stub System.out.println("service:onRebind Intent"+intent); super.onRebind(intent); } //接触绑定时触发 public boolean onUnbind(Intent intent) { // TODO Auto-generated method stub System.out.println("service:onUnbind Intent"+intent); return super.onUnbind(intent); } //创建时触发 public void onCreat(){ System.out.println("service:onCreat "); super.onCreate(); } // public void onCreate() { // System.out.println("****onCreate"); // // } // // @Override // //销毁时触发 public void onDestroy(){ System.out.println("****onDestroy"); } //启动时触发 public int onStartCommand(Intent intent,int flag,int startid){ System.out.println("****onStart Intent"+intent+" flag "+flag+" startid:"+startid); return Service.START_CONTINUATION_MASK; } }
布局函数加两个按钮:
<Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="start" android:text="启动Service" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="stop" android:text="停止Service" /> <Button android:id="@+id/button3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="Bind" android:text="启动绑定" /> <Button android:id="@+id/button4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="Unbind" android:text="解除绑定" />
Activity:
public class MainActivity extends Activity { public ServiceConnection connect=new ServiceConnection(){ @Override public void onServiceConnected(ComponentName arg0, IBinder service) { // TODO Auto-generated method stub try { System.out.println("###ServiceConnection Sucess,service is"+service.getInterfaceDescriptor()); } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void onServiceDisconnected(ComponentName arg0) { // TODO Auto-generated method stub System.out.println("###ServiceConnection Failure"); } }; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void start(View v){ MainActivity.this.startService(new Intent(MainActivity.this,MyService.class)); } public void stop(View v){ MainActivity.this.stopService(new Intent(MainActivity.this,MyService.class)); } public void Bind(View v){ MainActivity.this.bindService(new Intent(MainActivity.this,MyService.class) ,MainActivity.this.connect,Context.BIND_AUTO_CREATE); } public void Unbind(View v){ MainActivity.this.unbindService(MainActivity.this.connect); } }
按绑定:
接触绑定:
当我突然退出程序的时候:
实例完成,大家课后可以深入思考一下service工作原理
相关推荐
2、针对对普通类绑定service进行测试 3、普通类可以绑定service,但是需要activity传入一个Contex参数 4、该测试可以将业务代码和activity或者service分离,实现程序更好的结构,提高代码可读性 5、欢迎大家一起讨论...
Activity开启,绑定,解绑,关闭Service。Kotlin版本。适合初学者
浅析aidl过程和绑定service的过程(不会使用的撤).zip
1. 使用了BindService绑定Service。 2. 使用Boardcast,Service发送广播通知Activity更新进度条进度,歌曲状态更新等。
Android绑定Service进行通信
android播放器绑定Service,小程序,交流用
主要演示android的的service如何绑定的完整代码
代码中包含同个应用程序间Service的...Server工程为Service所在的应用程序,Client工程为要绑定Service的应用程序,例子简单易懂,可配合http://blog.csdn.net/u013524014/article/details/50314477 中的介绍帮助理解。
一个关于如何以绑定方式启动service的Androiddemo
绑定本地Service并与之通信
适合新手入门的bindService小Demo.
实现activity和service绑定,没有冗余代码,仅仅为了说明绑定
绑定service并且与之通讯,简单使用service
使用AIDL实现Service与Client绑定后的双向调用,Client在绑定Service时传入自己的Binder ,Service使用这个Binder实现调用Client的方法
Activity开启,关闭,绑定,解绑Service。代码清晰,适合初学者
Binder通信过程类似于TCP/IP服务连接过程binder四大架构Server(服务器),Client(客户端),ServiceManager(DNS)以及Binder驱动(路由器) 其中Server,Client,ServiceManager运行于用户空间,驱动运行于内核空间。...
android使用Messenger绑定Service的多种实现方法,需要的朋友可以参考一下
本文主要介绍Android IPC机制绑定Service 实现本地通信,通过图解,代码等方式给大家解释Android IPC机制,需要参考的同学可以看一下
NULL 博文链接:https://staroflife.iteye.com/blog/1738074