歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Android service 精辟解說

本地服務

所謂本地服務,其實就是完全服務於一個進程的組件。本地服務的這種特性決定了它有特別的啟動方式。通常這類服務的典型案例,就是郵件輪詢。

調用Context.startService()啟動服務

package net.bpsky;   import Android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.app.Service; import android.content.Intent; import android.os.IBinder;   public class DoudingService extends Service {           private NotificationManager notificationMgr;       @Override     public IBinder onBind(Intent arg0) {         // TODO Auto-generated method stub         return null;     }           @Override     public void onCreate(){         super.onCreate();                   notificationMgr = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);         displayNotificationMessage("Starting Background Service!");         Thread thr = new Thread(null,new ServiceWorker(),"BackgroundService");         thr.start();     }           class ServiceWorker implements Runnable{         public void run(){             // bla bla bla...         }     }           @Override     public void onDestroy(){         displayNotificationMessage("Stopping Background Service");         super.onDestroy();     }           @Override     public void  onStart(Intent intent,int startId){         super.onStart(intent, startId);     }           private void displayNotificationMessage(String message){         Notification notification = new Notification(R.drawable.note,message,System.currentTimeMillis());         PendingIntent contentIntent = PendingIntent.getActivity(this,0,new Intent(this,FeedActivity.class),0);         notification.setLatestEventInfo(this, "background Service", message, contentIntent);         notificationMgr.notify(R.id.app_notification_id,notification);     }   }

遠程服務

支持onBind()方法的,就是遠程服務。遠程服務並不是說一定要遠程訪問,而是支持(RPC,Remote Procedure Call,遠程過程調用)。這類服務的典型案例就是應用程序之間執行通信。比如:路由服務,將信息轉發至其它應用程序。遠程服務最重要的一個特性就是需要AIDL(Android Interface Definition Language)向客戶端定義自身。

  • 定義AIDL接口
  • 調用Context.bindService()綁定調用
  • 優勢在於允許不同進程進行綁定調用
  • 在使用bindService時是異步操作,目標服務如果未在後台運行,那麼在鏈接過程中會被啟動。

下面我們來作一個調用模擬,可以看到圖例大概的結構是這樣的。

服務端(RPCService)

Copyright © Linux教程網 All Rights Reserved