安卓中服务的开启方式
一:采用start的方式开启服务
调用函数:startService(Intent)->onCreate()->onStart()/onStartCommand()->onDestroy() 特点:服务被开启后不会重复开启,,只会调用onStart(),服务只会被停止一次。 二:采用bind的方式开发服务 调用函数:bindService(Intent…)->onCreate()->onBind()->onUnBind()->onDestroy(); 特点:绑定不会调用onStart()[过时了]和onStartCommand()方法。
两种服务的区别: start方式开发服务,一旦服务开启跟调用者就没有任何关系了,比如我们的服务是在Activity中调用开启的,当Activity关闭的时候,服务不会关闭。 bind方式开启服务,调用者没了,服务也会关闭,可以理解为同生共死。
对于start开启服务的方式比较简单,重点讲解bind的方式!
例子: 1.布局里面设置三个按钮
2.为按钮设置监听事件,有好几种方式。 3.处理事件。当点击绑定的时候:
/*绑定的创建方式*/Intent intent = new Intent(this, MyService.class);bindService(intent, conn, BIND_AUTO_CREATE);
conn是自己实现的功能类,继承自ServiceConnection。 完整代码如下:
{private MyConn conn;private Call c;(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//Call类似中间人的功能。}(View v){conn = new MyConn();Intent intent = new Intent(this, MyService.class);bindService(intent, conn, BIND_AUTO_CREATE);}(View v){unbindService(conn);c = null;}/** 调用服务里的方法*/(View v){c.callMethodInService();}{(ComponentName name, IBinder service) {System.out.println(“调用服务里面的方法”);c = (Call) service;}(ComponentName name) {}}}
service代码如下:
{@Overridepublic IBinder onBind(Intent intent) {System.out.println(“服务被成功绑定了”);return new Call();}() {System.out.println(“onCreate”);super.onCreate();}(Intent intent, int flags, int startId) {System.out.println(“onstartCommand”);return super.onStartCommand(intent, flags, startId);}() {System.out.println(“ondestroy”);super.onDestroy();}(){Toast.makeText(this, “methodInService”, 0).show();}{(){methodInService();}}}
布局文件:
=========>
停止每日在车水马龙的市井里忙碌的穿梭,