2
3
import android.os.Bundle;
4
import android.os.IBinder;
5
import android.app.Activity;
6
import android.content.ComponentName;
7
import android.content.Context;
8
import android.content.Intent;
9
import android.content.ServiceConnection;
10
import android.view.Menu;
11
import android.view.View;
12
import android.view.View.OnClickListener;
13
import android.widget.Button;
14
import android.widget.Toast;
15
import android.widget.SearchView.OnCloseListener;
16
17
public
class MainActivity
extends Activity
implements OnClickListener, ServiceConnection {
18
19
private Button btn_start, btn_stop, btn_bind, btn_unbind,btn_getNum;
20
private Intent servicesIntent;
21
private EchoServices echoServices;
22
23 @Override
24
protected
void onCreate(Bundle savedInstanceState) {
25
super.onCreate(savedInstanceState);
26 setContentView(R.layout.activity_main);
27 btn_start = (Button) findViewById(R.id.btn_start);
28 btn_stop = (Button) findViewById(R.id.btn_stop);
29 btn_bind = (Button) findViewById(R.id.btn_bind);
30 btn_unbind = (Button) findViewById(R.id.btn_unbind);
31 btn_getNum = (Button) findViewById(R.id.btn_getNum);
32 btn_start.setOnClickListener(
this);
33 btn_stop.setOnClickListener(
this);
34 btn_bind.setOnClickListener(
this);
35 btn_unbind.setOnClickListener(
this);
36 btn_getNum.setOnClickListener(
this);
37 servicesIntent =
new Intent(
this, EchoServices.
class);
38 }
39
40 @Override
41
public
void onClick(View v) {
42
int id = v.getId();
43
switch (id) {
44
case R.id.btn_start:
45 startService(servicesIntent);
46
break;
47
case R.id.btn_stop:
48 stopService(servicesIntent);
49
break;
50
case R.id.btn_bind:
51 bindService(servicesIntent,
this, Context.BIND_AUTO_CREATE);
52
break;
53
case R.id.btn_unbind:
54 unbindService(
this);
55
break;
56
case R.id.btn_getNum:
57
if(echoServices!=
null){
58 System.out.println(echoServices.getCurrentNumber());
59 }
60
61
break;
62 }
63
64 }
65
66
/**
67
* 当服务绑定成功时触发
68
*/
69 @Override
70
public
void onServiceConnected(ComponentName arg0, IBinder binder) {
71 Toast.makeText(getApplicationContext(), "绑定成功", 1).show();
72 echoServices=((EchoServices.bindServices)binder).getEchoServices();
73 }
74
75
/**
76
* 当绑定失败时触发
77
*/
78 @Override
79
public
void onServiceDisconnected(ComponentName arg0) {
80 Toast.makeText(getApplicationContext(), "绑定失败", 1).show();
81 }
82
83 }
4.oncreat、onbind、ondestroy、onunbind方法的区别app
采用Context.bindService()方法启动服务,在服务未被建立时,系统会先调用服务的onCreate()方法,接着调用onBind()方法,这个时候访问者和服务绑定在一块儿。 若是访问者要与服务进行通讯,那么,onBind()方法必须返回Ibinder对象。若是访问者退出了,系统就会先调用服务的onUnbind()方法,接着调用onDestroy()方法。若是调用bindService()方法前服务已经被绑定,屡次调用bindService()方法并不会致使屡次建立服务及绑定(也就是说onCreate()和onBind()方法并不会被屡次调用)。若是访问者但愿与正在绑定的服务解除绑定,能够调用unbindService()方法,调用该方法也会致使系统调用服务的onUnbind()-->onDestroy()方法。ide
Activity与服务进行通讯,开发人员一般把通讯方法定义在接口里,而后让Ibinder对象实现该接口,而Activity经过该接口引用服务onBind()方法返回的Ibinder对象,而后调用Ibinder对象里自定义的通讯方法。this