原创 Android笔记15-四大组件之Service(二)

2014-6-30 01:11 1127 18 18 分类: 软件与OS 文集: Android
 
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 中的设置
       
           
               
   
       
具体安卓源程序例子见附件。
 
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
18
关闭 站长推荐上一条 /3 下一条