关于Service的开发详解已经在上一篇:Android开发四大组件之Service(详解篇)讲的很清楚了,本篇主要对Service的开发实例做下讲解。

程序运行效果图:


程序代码:

BindService:


package com.jph.servicedemo;

import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
/**
* Describe:</br>
* Service子类
* BindService实现了Service并重写了父类的
* onBind、onCreate、onDestroy、onUnbind
* 以及onDestroy等方法。
* 并在onCreate方法中创建并启动一个线程,动态修改count变量值,
* 创建Binder的子类LocalService类,用于作为绑定该Service时,
* 回调方法的返回对象。
* @author JPH
* Date:2014.07.21
* */
public class BindService extends Service {
private int count=0;
private boolean isQuit=false;
//定义getService方法返回的对象
public LocalService localService=new LocalService();
//创建Binder子类
public class LocalService extends Binder{
public int getCount() {
return count;
}
public BindService getService() {
return BindService.this;
}
}
//Service子类必须实现的方法,绑定该Service时回调的方法
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return localService;
}
//Service被创建是调用该方法
@Override
public void onCreate() {
// TODO Auto-generated method stub
System.out.println("Service is Created.");
//创建并启动一个线程,动态修改count变量值
new Thread(){
@Override
public void run() {
// TODO Auto-generated method stub
while (!isQuit) {
try {
Thread.sleep(1000);//使得当前线程休眠1000毫秒
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
count++;
}
}
}.start();
super.onCreate();
}
//在所有onUnbind被回调之后调用
@Override
public void onDestroy() {
// TODO Auto-generated method stub
System.out.println("Service is Destroyed.");
isQuit=true;
super.onDestroy();
}
//定义一个返回实例名的方法
public String getDemoName() {
return "Service实例";
}
//在所有与Service绑定的客户端都解除绑定之后被回调
@Override
public boolean onUnbind(Intent intent) {
// TODO Auto-generated method stub
System.out.println("Service is Unbind.");
return true;//表示下次客户端绑定的时候接受一个onRebind()的调用(而不是调用 onBind())
}

}
ServiceDemo:


<pre name="code" class="java">package com.jph.servicedemo;

import com.jph.servicedemo.BindService.LocalService;

import android.os.Bundle;
import android.os.IBinder;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
/**
* Describe:</br>
* Service实例
* 本实例简单实现了绑定Service并与之通信
* @author JPH
* Date:2014.07.21
* */
public class ServiceDemo extends Activity {
Button btnBind,btnUnBind,btnGetServiceStatus;
BindService bindService;
LocalService localService;
private boolean isBind=false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnBind=(Button)findViewById(R.id.btnBind);
btnUnBind=(Button)findViewById(R.id.btnUnBind);
btnGetServiceStatus=(Button)findViewById(R.id.btnGetServiceStatus);
OnClickListener listener=new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.btnBind:
// Intent intent=new Intent();
// intent.setAction("com.jph.servicedemo.BIND_SERVICE"); //隐式启动Service
Intent intent=new Intent(ServiceDemo.this,BindService.class);//显示启动Service
//绑定指定的Service
bindService(intent, serviceConnection, BIND_AUTO_CREATE);
isBind=true;
break;
case R.id.btnUnBind:
if (isBind) {
//解除绑定Service
unbindService(serviceConnection);
isBind=false;
bindService=null;
Toast.makeText(ServiceDemo.this,"--Service is Unbind.--"
, Toast.LENGTH_LONG).show();
}else {
Toast.makeText(ServiceDemo.this,"--你还未绑定Service--"
, Toast.LENGTH_LONG).show();
}
break;
case R.id.btnGetServiceStatus:
if (bindService==null) {
Toast.makeText(ServiceDemo.this,"请先绑定Service"
, Toast.LENGTH_LONG).show();
}else {
Toast.makeText(ServiceDemo.this,"App name:"+
bindService.getDemoName()+"\n count:"+
localService.getCount(), Toast.LENGTH_LONG).show();
}
break;
}
}
};
btnBind.setOnClickListener(listener);
btnGetServiceStatus.setOnClickListener(listener);
btnUnBind.setOnClickListener(listener);
}
//定义一个ServiceConnection对象
private ServiceConnection serviceConnection=new ServiceConnection() {
//当Activity与Service通过非UnBind()方法断开连接的时候回调该方法
@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
bindService=null;
Toast.makeText(ServiceDemo.this,"--Service UnConnected.--"
, Toast.LENGTH_LONG).show();
}
//当Activity与Service连接成功的时候回调该方法
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// TODO Auto-generated method stub
//获取getService()方法返回的BindService对象
localService=((LocalService)service);
bindService=localService.getService();
Toast.makeText(ServiceDemo.this,"--Service Connected.--"
, Toast.LENGTH_LONG).show();
System.out.println("--Service Connected.--");
}
};
}


 
AndroidManifest.xml: 


<!-- 配置一个Service组件 -->
<service android:name=".BindService">
<intent-filter>
<!-- 为该Service组件的intent-filter配置action -->
<action android:name="com.jph.servicedemo.BIND_SERVICE"></action>
</intent-filter>
</service>
实例分析:

通过DDMS的LogCat有如上图所示的输出:

如果用户单击程序界面上的“绑定service”按钮即可看到上图所示的“Service is Created.”与“--Service Connected.--”的输出。当该Activity中绑定该Service之后,该Activity还可以通过LocalService对象获取Service的运行状态,如果用户单击程序界面上的“获取Service状态”按钮即可看到程序界面弹出的提示信息。如果我们单击“解除绑定”按钮,即可看到LogCat中的

输出信息:“Service is Unbind.”,“Service is Destroyed.”,当程序调用ubbindService()方法解除对某个Service的绑定时,系统会先回调Service的ubbindService()方法,然后回调onDestory()方法,这正验证了上一篇中讲到的onDestroy()是Service生命周期中最后一个被回调的方法。

与多次调用startService()方法启动Service不同的是,多次调用bindService()方法并不会重复绑定。在这个实例中不管用户单击“绑定Service”对少次,系统只会回调Service的onBind()方法一次。

更多相关文章

  1. 如何在Log中模拟方法e
  2. fragment 状态保存时怎么执行一些需要在onResume、onPause方法里
  3. 同时兼容高低版本的setBackground跟setTextColor方法
  4. Android绑定银行卡提现怎么做?
  5. 绑定服务后台播放音频的简单示例
  6. 四极管:I2CTools编译方法
  7. 检查ArrayList是否只包含null值的方法。
  8. 不同Android版本设备正确获取屏幕分辨率的通用方法
  9. studio更新时候,不小心点了ignore,无法更新的解决方法

随机推荐

  1. 访问本地服务器
  2. Android 中的布局方式之线性布局
  3. 极光推送使用实例(三) Android客户端
  4. Android内存泄漏监测(MAT)及解决办法
  5. android 学习笔记4——post请求+线程控制
  6. 不可或缺 Windows Native (25) - C++: wi
  7. android 8.1.0 添加系统service
  8. android 使用xml selector设置按钮点击效
  9. android framework增加新的系统服务
  10. Android帮助文档.exe(第1,2,3部分)提供下载