2014-01-31 125 views
0

我有一項服務來掃描藍牙低功耗設備並顯示通知。如果應用程序已啓動或應用程序處於後臺,此功能可用。但如果應用程序從後臺刪除,該服務正在運行,但藍牙掃描不工作。如果應用程序被殺害,服務可以做些什麼嗎?謝謝。Android後臺服務藍牙掃描

回答

0

不清楚這個問題。

但基於我對上述問題的理解,請查找我的輸入如下。 在極端情況下,如果Android系統需要內存,基於進程的重要性,它開始以最不重要的方式排序進程。在這種情況下,如果您的應用程序被殺死,那麼該應用程序的服務將無法繼續運行。它也被殺死了。

但是可以通過startForground()方法將該服務作爲前臺進程運行的進程,通過該進程它不太可能被殺死。

如果應用程序&整個應用程序的服務組件中的兩個不同的進程&運行整個應用程序就會被殺死,但過程與服務運行的進程正在運行還是有那麼一個需要檢查的相關性,如BluetoothAdapter組件或者這樣的事情被應用進程&殺死,請確保該服務是獨立運行在不同進程中的組件。

0

謝謝你的回答。問題是應用程序上下文不可用。我找到了一個解決方案。我啓動一個Alarmmanager並每15分鐘發一個意圖。這個意圖是由我自己的在AndroidManifest.xml中聲明的接收者處理的。如果處理意圖,應用程序上下文可用,我可以啓動該服務。

開始AlarmManager

Intent alarmIntent = new Intent(MyApp.getAppContext(),AlarmBroadcastReceiver.class); 
PendingIntent pi = PendingIntent.getBroadcast(MyApp.getAppContext(), 0, alarmIntent, 0); 
AlarmManager alarmMgr = (AlarmManager)MyApp.getAppContext().getSystemService(Context.ALARM_SERVICE); 
alarmMgr.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
     AlarmManager.INTERVAL_FIFTEEN_MINUTES, 
     AlarmManager.INTERVAL_FIFTEEN_MINUTES, pi); 

代碼在AndroidManifest.xml

<receiver 
     android:enabled="true" 
     android:name="com.example.AlarmBroadcastReceiver" 
     android:exported="false"> 
     <intent-filter> 
       <action android:name="com.example.AlarmBroadcastReceiver.checkservice" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
</receiver> 
接收機

package com.example; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 

public class AlarmBroadcastReceiver extends BroadcastReceiver{ 

    @Override 
    public void onReceive(Context arg0, Intent arg1) { 

    } 

} 

申報接收機