安卓
来源:互联网 发布:乐视mac码为啥不正确 编辑:程序博客网 时间:2024/04/26 01:20
可交互的后台服务是指前台页面可以调用后台服务的方法,可交互的后台服务实现步骤是和不可交互的后台服务实现步骤是一样的,区别在于启动的方式和获得Service的代理对象
一、创建服务类
和普通Service不同在于这里返回一个代理对象,返回给前台进行获取,即前台可以获取该代理对象执行后台服务的方法
public class BackGroupService extends Service { /** * 綁定服务时调用 * * @param intent * @return */ @Nullable @Override public IBinder onBind(Intent intent) { Log.e("Service", "onBind"); //返回代理对象 return new MyBinder(); } /** * 代理类 */ class MyBinder extends Binder { public void showToast() { Log.e("Service", "showToast"); } public void showList() { Log.e("Service", "showList"); } } /** * 解除绑定服务时调用 * @param intent * @return */ @Override public boolean onUnbind(Intent intent) { Log.e("Service", "onUnbind"); return super.onUnbind(intent); } /** * 服务创建时调用 */ @Override public void onCreate() { Log.e("Service", "onCreate"); super.onCreate(); } /** * 服务被销毁时调用 */ @Override public void onDestroy() { Log.e("Service", "onDestroy"); super.onDestroy(); }}
二、配置服务
<service android:name=".Service.BackGroupService"/>
三、绑定服务和解除绑定服务
我们通过两个按钮分别演示绑定服务和解除绑定服务,通过bindService()开启服务,通过unbindService()停止服务
public class MainActivity extends AppCompatActivity { Button bt_open, bt_close; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); bt_open = (Button) findViewById(R.id.open); bt_close = (Button) findViewById(R.id.close); final Intent intent = new Intent(this, BackGroupService.class); bt_open.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { bindService(intent, conn, BIND_AUTO_CREATE); } }); bt_close.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { unbindService(conn); } }); } ServiceConnection conn = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { //拿到后台服务代理对象 BackGroupService.MyBinder myBinder = (BackGroupService.MyBinder) service; //调用后台服务的方法 myBinder.showToast(); myBinder.showList(); } @Override public void onServiceDisconnected(ComponentName name) { } };}
这里和startService的区别在于多了一个ServiceConnection对象,该对象是用户绑定后台服务后,可获取后台服务代理对象的回调,我们可以通过该回调,拿到后台服务的代理对象,并调用后台服务定义的方法,也就实现了后台服务和前台的交互
四、运行代码
运行程序后,我们点击绑定服务,然后一段时间后解除绑定服务。我们以Log信息来验证Service的生命周期:onCreate->onBind->onUnBind->onDestroy,其中也可以看到我们调用后台服务的方法showToast和showList。
0 0
- 安卓
- 安卓
- 安卓
- 安卓
- 【安卓】
- 安卓
- 安卓
- 安卓
- 安卓
- 安卓
- 安卓
- 安卓
- 安卓
- 安卓学习-安卓环境布置
- 安卓开发-安卓启动过程
- 安卓开发-安卓与sqlite
- 安卓开发工具安卓
- 安卓断点续传支持安卓6.0
- PCIE MSI特性
- ajax上传文件(以图片为例) SpringMVC
- web.xml文件的作用及基本配置
- JAVA互联网架构师5套视频(700G)
- 正则表达式学习之一
- 安卓
- C++ priority_queue 知识点
- [深度学习] Very Deep Convolutional Networks for Large-Scale Image Recognition(VGGNet)阅读笔记
- Centos tomcat+mysql+ftp 网站服务器搭建指南
- 装载问题
- md5 authentication failed
- struts下session的操作
- 数据库连接池——drui
- js中匿名函数的创建和调用方法分析