0
点赞
收藏
分享

微信扫一扫

Service两套生命周期

onCreate() onStartCommand() onDestroy()
服务与其他组件绑定起来
onCreate() onStartCommand() onBind() onUnbind() onDestroy()

PS技巧:实测发现onBind()和onUnbind()并不一定总是执行,但是serviceConnection却总是执行,所以逻辑操作(绑定的时候执行什么东西)可以放在serviceConnection中!!

package com.example.sj.servicedemo2;

import android.app.Service;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Toast;

public class Main2Activity extends AppCompatActivity {
ComponentName componentName;
Intent intent = new Intent();
//做连接
private ServiceConnection conn=new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
//连接成功
System.out.println("连接成功....");
}

@Override
public void onServiceDisconnected(ComponentName name) {
//连接断开
}
};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
componentName = new ComponentName(this, "com.example.sj.servicedemo2.MyService2");
intent.setComponent(componentName);
}

public void go1(View view) {
Toast.makeText(this, "启动了", Toast.LENGTH_SHORT).show();
startService(intent);
}

public void go2(View view) {
Toast.makeText(this, "终止了", Toast.LENGTH_SHORT).show();
stopService(intent);

}

public void go3(View view) {
Toast.makeText(this, "绑定了", Toast.LENGTH_SHORT).show();
/*
Service.BIND_AUTO_CREATE 绑定自动创建
0 绑定不自动创建 也会把绑定操作搁置,延迟到创建时再去绑定
*/
bindService(intent,conn, Service.BIND_AUTO_CREATE);


}

public void go4(View view) {
Toast.makeText(this, "解除绑定了", Toast.LENGTH_SHORT).show();
unbindService(conn);

}

@Override
protected void onDestroy() {
super.onDestroy();
unbindService(conn);
// stopService(intent);
}
}

package com.example.sj.servicedemo2;

import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;

public class MyService2 extends Service {
public MyService2() {
System.out.println("MyService2的构造器");
}

@Override
public void onCreate() {
super.onCreate();
System.out.println("MyService2.onCreate");
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
System.out.println("MyService2.onStartCommand");
return super.onStartCommand(intent, flags, startId);
}

@Override
public void onDestroy() {
super.onDestroy();
System.out.println("MyService2.onDestroy");
}
//绑定服务执行的方法
//不一定每次绑定服务都会执行这个方法
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
System.out.println("MyService2.onBind");
return new MyBinder();
}
//解绑定服务执行的方法
//不一定每次解绑定服务都会执行这个方法
@Override
public boolean onUnbind(Intent intent) {
System.out.println("MyService2.onUnbind");
return super.onUnbind(intent);
}
//Binder将来会作为我们通信的载体
private class MyBinder extends Binder{

}
}


举报

相关推荐

0 条评论