03_Service的绑定
2024-09-08 01:27:32
Start Service启动的Service,Application退出,Service也不会退出;
Bind Service启动的Service,Application退出,Service就会退出。
Start Service和Stop Service仅仅是启动服务,并不能进行通信。通过Bind Service与服务进行绑定,才能与服务通信。
package com.example.servdemo; import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button; public class MainActivity extends Activity implements OnClickListener, ServiceConnection { private Button btnStartService, btnStopService, btnBindService, btnUnbindService, btnGetCurrentNum;
private Intent serviceIntent;
private EchoService echoService = null; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); serviceIntent = new Intent(this, EchoService.class); btnStartService = (Button) findViewById(R.id.btnStartService);
btnStopService = (Button) findViewById(R.id.btnStopService);
btnBindService = (Button) findViewById(R.id.btnBindService);
btnUnbindService = (Button) findViewById(R.id.btnUnbindService);
btnGetCurrentNum = (Button) findViewById(R.id.btnGetCurrentNum); btnStartService.setOnClickListener(this);
btnStopService.setOnClickListener(this);
btnBindService.setOnClickListener(this);
btnUnbindService.setOnClickListener(this);
btnGetCurrentNum.setOnClickListener(this);
} @Override
public void onClick(View v) { switch (v.getId()) { case R.id.btnStartService:
startService(serviceIntent);
break; case R.id.btnStopService:
stopService(serviceIntent);
break; case R.id.btnBindService:
bindService(serviceIntent, this, Context.BIND_AUTO_CREATE);
break; case R.id.btnUnbindService:
unbindService(this);
echoService = null;
break; case R.id.btnGetCurrentNum:
if (echoService != null) {
System.out.println("The Number is "+echoService.getCurrentNum());
}
break;
}
} @Override
public void onServiceConnected(ComponentName name, IBinder binder) {
System.out.println("onServiceConnected!"); echoService = ( (EchoService.EchoServiceBinder)binder ).getService();
} @Override
public void onServiceDisconnected(ComponentName name) { } }
package com.example.servdemo; import java.util.Timer;
import java.util.TimerTask; import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder; public class EchoService extends Service { @Override
public IBinder onBind(Intent intent) {
System.out.println("onBind!");
return echoServiceBinder;
} private final EchoServiceBinder echoServiceBinder = new EchoServiceBinder(); public class EchoServiceBinder extends Binder{
public EchoService getService() {
return EchoService.this;
}
} public int getCurrentNum(){
return i;
} @Override
public void onCreate() {
// TODO Auto-generated method stub
System.out.println("Service Start!");
startTimer();
super.onCreate();
} @Override
public void onDestroy() {
// TODO Auto-generated method stub
System.out.println("Service Stop!");
stopTimer();
super.onDestroy();
} private int i = 0; public void startTimer(){
if(timer == null){
timer = new Timer();
timerTask = new TimerTask() { @Override
public void run() {
i++;
System.out.println(i);
}
}; timer.schedule(timerTask, 1000, 1000);
}
} public void stopTimer(){
if(timer != null){
timerTask.cancel();
timer.cancel(); timer = null;
timerTask = null;
}
} private Timer timer = null;
private TimerTask timerTask = null; }
最新文章
- 项目分析_xxoo-master
- 7 款顶级开源 BI(商务智能)软件和报表工具
- 转-阿里云CentOS Linux服务器上用postfix搭建邮件服务器
- C#设计模式-单例模式
- html5学习笔记(2)
- node.js处理post请求
- JSP学习笔记 - 源码 -- JSP Custom Tags -- JSP自定义标记
- hdoj 1028 Ignatius and the Princess III(区间dp)
- MySQL两个最简单的delimiter的使用demo
- iOS开发之Xcode常用调试技巧总结
- 2、搭建一个简单的Web项目
- 51nod 1617 奇偶数组
- failed call to cuInit: CUDA_ERROR_NO_DEVICE: no CUDA-capable device is detected 排坑指南
- java并发编程概念
- sql字符串累加
- 金融量化分析【day113】:羊驼策略
- VSFTPD虚拟用户配置
- Javascript-闰年javascript的判断
- yaml 文件保存
- Prim算法和Kruskal算法求最小生成树