2011-07-11 44 views

回答

4
public class MyService extends Service { 

    private static MyService instance = null; 

    public static boolean isInstanceCreated(){ 
     return instance != null; 
    } 
    @Override 
    public IBinder onBind(Intent arg0) { 
     // TODO Auto-generated method stub 
     return null; 
    } 
    @Override  
    public void onStart(Intent intent, int startId) { 
     super.onStart(intent, startId); 
     //Toast.makeText(this, "onStart", Toast.LENGTH_SHORT).show(); 
     } 
    @Override 
    public void onCreate() { 
     super.onCreate(); 
     instance = this; 
     new Thread(threadBody).start(); 
    } 
    @Override  
    public void onDestroy() { 
     instance = null; 
    } 
} 

在你的活動:

if(!MyService.isInstanceCreated()) 
     startService(new Intent(YourActivityClassName.this, MyService.class)); 
+0

由於謝里夫, 我可以實現Android框架內這個代碼片斷,讓自己的服務可以通過device.if所有應用程序共享的話,請讓我知道了實施步驟。 –

+0

是的,但它需要IBinder和許多東西..只需檢查http://developer.android.com/reference/android/app/Service.html –

+0

myService應該是MyService,除非您試圖混淆人們 –

13

一個系統服務,更多的是需要。實質上,至少在Android 2.3中,必須擴展SystemServer.java,以便在system_server啓動時實例化新服務。

德州儀器友好提供一個很好的例子:

http://processors.wiki.ti.com/index.php/Android-Adding_SystemService

的的CyanogenMod SystemServer.java還爲在config.xml中動態加載系統服務作爲在陣列「config_vendorServices」定義的代碼(參見芯/res/res/values/config.xml),我相信它可以在供應商或設備目錄中被覆蓋。然而,我們並沒有試圖自己使用它,並且我不知道CyanogenMod是2.3還是通用的。[45]。

+1

如果有其他人在這裏結束,幾年前CyanogenMod的vendorServices功能已經升級到ICS。 – bmaupin

+0

此外,在SELinux處於執行模式時,您需要將您的服務名稱列入白名單/ sepolicy/service_contexts – Memetic

+0

請注意,Google建議您在'device//'目錄中通過'BoardConfig.mk'添加SELinux配置: https://source.android.com/devices/tech/security/selinux/implement.html –

3

按照以下步驟在android框架中編寫自己的系統服務。

  1. 編寫自己的服務/管理器,通過繼承該存根暴露的API。
  2. 爲您的服務創建一個aidl文件以公開包含在構建中的&。
  3. 在System Server中添加您的服務,您的服務將隨所有核心服務一起啓動。
  4. 在上下文impl文件中註冊您的服務上下文。
  5. 致電getSystemService(您服務的上下文)

PS使用您的服務應用程序:如果您的服務得到一些致命異常,設備軟重啓,爲您服務是在系統服務運行。

+0

第3步似乎要求您更改AOSP代碼? – zaitsman

+0

@zaitsman是的,你可以查看這個源代碼http://processors.wiki.ti.com/index.php/Android-Adding_SystemService 雖然它不是主調,但它會給你基本的想法 –

相關問題