4.1 Service
目的:创建一个 每隔500毫秒就计数的后台服务,启动该Service 后,用户在前台可以通过按钮实时查询当前计数的值。
(1) 新建一个继承Service 的类。
(2) 重写 onCreate() 方法,并且在里面任务,该任务就是启动一个线程来动态修改计数值。
注意是重写,所以,必须有 super.onCreate()
// 当Service 被创建时就会回调该方法。
@Override
public void onCreate() {
super.onCreate();
new Thread() {
@Override
public void run() {
while (!count_flag) {
// 线程延时睡眠500毫秒
try {
// Thread.sleep(500);
} catch (Exception e) {
// TODO: handle exception
}
count++;
}
}
}.start();
}
(3)重写Service 断开连接时候的回调方法。
/*
* Service 断开连接时 回调的方法
*/
@Override
public boolean onUnbind(Intent intent) {
Log.i("BindTest", "Service is Unbinded");
return true;
}
(4)重写 Service 关闭时回调的方法
/*
* Service 关闭时 回调的方法
*/
@Override
public void onDestroy() {
super.onDestroy();
this.count_flag = true;
Log.i("BindTest", "Service is Destroyed");
}
(5)通过继承 Binder类来新写一个内部类,从而可以用该类来声明一个对象,用户就可以通过该IBinder对象来与 Service通信。
private MyBinder mybinder = new MyBinder();
public class MyBinder extends Binder {
public int getCount() {
return count;
}
}
通过上述两段代码,我们就可以在 绑定Service 中返回该对象。
// 必须实现的方法,当绑定该Service 时回调该方法
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return mybinder;
}
4.2 Activity
问题遗漏: 开启定时来实时更新 Service 的计数值会出错。原因不详细。
(1)创建 Intent
final Intent bind_intent = new Intent();
bind_intent.setAction("com.example.servicetest.myBindService");
(2)绑定并开始服务
bindService(bind_intent, conn, BIND_AUTO_CREATE);
这里conn 要先定义。
// 定义一个ServiceConnection 对象
private ServiceConnection conn = new ServiceConnection() {
// 当该Activity 与Service 断开连接时回调这个方法
@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
System.out.println("--Service Disconnected--");
// 还可以在这里写其他断开后的内容
}
// 当该Activity 与Service 连接成功时回调这个方法
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// TODO Auto-generated method stub
System.out.println("--Service connected--");
// 然后获取该Service 的onBind 方法所返回的MyBinder 对象,注意要强制类型转换
binder = (MyBindService.MyBinder) service;
}
};
(3)停止服务
unbindService(conn);
(4)在manifest .xml 中的设置
具体安卓源程序例子见附件。
文章评论(0条评论)
登录后参与讨论