Service代码:
/** * Created by dllo on 15/12/24. * 自己写: * 第一步:注册 * 第二步:建立内部类 Binder 为了绑定客户端与服务端 * 第三步:在Service的onBind方法中 返回Binder对象 * * 老师写: * 通过绑定方式的启动服务 * 第一步:创建好Service之后写一个继承自Binder的内部类,在该类中写好操作Service的方法 * 第二步:定义一个Binder对象 * 第三步:在onBind生命周期中,将该Binder对象返回 * */ public class DownloadService extends Service { /** * 定义我们自己写的Binder对象 */ private DownloadBinder downloadBinder = new DownloadBinder(); @Override public void onCreate() { super.onCreate(); Log.d("DownloadService","onCreate"); } @Nullable @Override /** *我们在onBind生命周期中,返回我们自己写的Binder对象 * 来讲服务通过Binder对象连接取来 */ public IBinder onBind(Intent intent) { Log.d("DownloadService","onBind"); return downloadBinder; } @Override public void onDestroy() { Log.d("DownloadService","onDestroy"); super.onDestroy(); } //Binder对象用来绑定服务端和客户端 /** * 自定义的内部类,继承Binder * 在该内部类里,我们写对服务进行操作的方法 * 通过该对象实现对服务的操作,并从服务中获取数据 */ class DownloadBinder extends Binder{ public void startDownload(){ Log.d("DownloadService","startDownload"); } public int getProgress(){ Log.d("DownloadService","getProgress"); return 0; } }
}
Activity代码
/** * Created by dllo on 15/12/24. * 自己写: * 第四步:在Activity中定义Binder对象 * 第五步:通过ServiceConnection对象 连接服务端与客户端 绑定和解绑 解绑时候 binder= null * 第六步:利用Intent传递Service信息 最后通过bindService方法将Activity与Service绑定到一起 * * 老师写: * 与服务进行绑定的流程 * 第一步:定义出在服务中写的Binder对象 * 第二步:定义ServiceConnection对象 并复写两个方法,在onServiceConnected对Binder进行赋值 * 将参数里IBinder对象赋值给自己写的Binder对象 * 第三步:通过调用BindService方法,连接服务和Activity * 该方法接收三个参数:第一个参数是 Intent 因为需要Intent来传值 * 第二个参数是ServiceConnection对象 * 第三个参数是 标志位, 通常填写BIND_AUTO_CREATE */ public class BindActivity extends AppCompatActivity implements View.OnClickListener { private DownloadService.DownloadBinder binder; private ServiceConnection serviceConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { binder = (DownloadService.DownloadBinder) service; } @Override public void onServiceDisconnected(ComponentName name) { binder = null; } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_bind); findViewById(R.id.btn_bind).setOnClickListener(this); findViewById(R.id.btn_huode).setOnClickListener(this); findViewById(R.id.btn_jiebang).setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.btn_bind: Intent bindService = new Intent(this,DownloadService.class); //最后一个参数代表绑定的时候 服务会自动创建 bindService(bindService,serviceConnection,BIND_AUTO_CREATE); break; case R.id.btn_huode: int progress = binder.getProgress(); Toast.makeText(this, "progress" + progress, Toast.LENGTH_SHORT).show(); break; case R.id.btn_jiebang: unbindService(serviceConnection); break; } } }