博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android 之 Service(Context BindService())
阅读量:4697 次
发布时间:2019-06-09

本文共 3399 字,大约阅读时间需要 11 分钟。

Service 学习第二篇,我们使用BindService()来启动Service.

第一步,同样需要继承Service ,实现它必须的方法。并把这个Service注册到AndroidManifest.xml中,做为一种隐式意图,然后等待Activity的启动。

              这里IBinder onBind(Intent intent);会返回一个IBinder 对象。就是我们Acitvity 与Service 交互的对象。

BindService.java

package com.hkrt.action;import android.app.Service;import android.content.Intent;import android.os.Binder;import android.os.IBinder;public class BindService extends Service {	private int count;	private boolean quit;	private MyBinder binder = new MyBinder();	public class MyBinder extends Binder {		public int getCount() {			return count;		}	}	@Override	public IBinder onBind(Intent intent) {		System.out.println("service is Binded");		return binder;	}	@Override	public void onCreate() {		System.out.println("Service is Create");		super.onCreate();		new Thread(){			@Override			 public void run(){				 while(!quit){					 try {						Thread.sleep(1000);					} catch (InterruptedException e) {						e.printStackTrace();					}					count++;				 }			 }		}.start();	}	@Override	public boolean onUnbind(Intent intent) {		System.out.println("Service is Unbind");		return true;	}	@Override	public void onDestroy() {		System.out.println("Service is Destroy");		super.onDestroy();		this.quit=true;	}}
AndroidManifest.xml

第二步:我们使用三个按钮,分别绑定Service和解除绑定,和获取Service状态。

main.xml

效果图:

第三步:关键性代码。

package com.hkrt.action;import android.app.Activity;import android.app.Service;import android.content.ComponentName;import android.content.Intent;import android.content.ServiceConnection;import android.os.Bundle;import android.os.IBinder;import android.view.View;import android.widget.Button;import android.widget.Toast;public class ServiceDemo2Activity extends Activity {	Button bind, unBind, serviceCount;	BindService.MyBinder binder;	private ServiceConnection conn = new ServiceConnection() {		@Override		public void onServiceConnected(ComponentName name, IBinder service) {			binder = (BindService.MyBinder) service;			System.out.println("service Connected");		}		@Override		public void onServiceDisconnected(ComponentName name) {			System.out.println("service disConnectioned");		}	};	@Override	public void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentView(R.layout.main);		bind = (Button) findViewById(R.id.bind);		unBind = (Button) findViewById(R.id.unBind);		serviceCount = (Button) findViewById(R.id.serviceCount);		final Intent intent = new Intent();		intent.setAction("com.hkrt.action.BIND_SERVICE");		bind.setOnClickListener(new View.OnClickListener() {			@Override			public void onClick(View v) {				bindService(intent, conn, Service.BIND_AUTO_CREATE);			}		});		unBind.setOnClickListener(new View.OnClickListener() {			@Override			public void onClick(View v) {				unbindService(conn);			}		});		serviceCount.setOnClickListener(new View.OnClickListener() {			@Override			public void onClick(View v) {				Toast.makeText(ServiceDemo2Activity.this,						"service的count值为" + binder.getCount(), 1).show();			}		});	}}
第四步:Service启动流程图。

Activity 与 Service 交互的结果。

Service的生命周期

转载于:https://www.cnblogs.com/java20130726/archive/2011/10/19/3218344.html

你可能感兴趣的文章
JAVA中protected的作用
查看>>
selenium python 启动Chrome
查看>>
MySQL优化索引及优化汉字模糊查询语句
查看>>
安装cocoaPod 的问题
查看>>
vs Obsolete标识符
查看>>
IOS 深拷贝和浅拷贝应用
查看>>
深度学习优化方法
查看>>
《剑指offer》第二十八题(对称的二叉树)
查看>>
解决编译错误: 非法字符: '\ufeff' 解决方案|错误: 需要class, interface或enum
查看>>
别说我不懂排序!几种常见排序算法(一)
查看>>
JAVA学习笔记-this隐式参数
查看>>
2017.05.01
查看>>
Oracle闪回技术
查看>>
Winform开发框架之通用高级查询模块--SNF快速开发平台3.3-Spring.Net.Framework
查看>>
kotlin项目开发基础之gradle初识
查看>>
poj_1458 LCS problem F.最长上升公共子序列
查看>>
重写方法,重载方法,虚方法和抽象方法的使用
查看>>
蓝牙协议栈中的 OSAL
查看>>
【Netty】EventLoop和线程模型
查看>>
打开一个页面,并监听该页面的关闭事件
查看>>