0
我正在開發一個服務,它在後臺運行並偵聽來自服務器的通知。該服務必須在設備啓動時啓動。不知何故,我無法實現它的工作。該服務啓動,但然後由系統停止。BOOT_COMPLETED後強制停止服務
即使遵循https://stackoverflow.com/a/7690600/981393中提出的模式,服務啓動後,我看到它是系統強制停止。
所以我想知道,這是應該的方式嗎?
任何幫助,將不勝感激。
接收機
public class SSBankBootReceiver extends BroadcastReceiver {
private static final String TAG = "SSBankBootReceiver";
private static final long PERIOD = 60000 * 1;
@Override
public void onReceive(Context ctxt, Intent intent) {
if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) {
Log.d(TAG, "Boot completed.");
startTestService(ctxt);
}
}
private void startTestService(Context ctxt) {
Log.d(TAG, "Starting test service...");
Intent i = new Intent(ctxt, TestService.class);
ctxt.startService(i);
}
服務
public class TestService extends Service {
private static final String TAG = "TestService";
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
printMessages();
super.onStartCommand(intent, flags, startId);
return START_REDELIVER_INTENT;
}
private void printMessages() {
// TODO Auto-generated method stub
while (true) {
try {
Log.d(TAG, "Imprimiendo nuevo mensaje...");
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
艙單
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".DashboardActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name="<package>.service.SSBankBootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
<service android:name="<package>.service.TestService"></service>
</application>
登錄
11-04 19:38:04.916: I/ActivityManager(276): Force stopping service ServiceRecord{41135258 u0 <package>/.service.TestService}
NOP。同樣的錯誤,但不一致。有時服務會繼續運行,有時會被殺死。難道它是刪除它的操作系統,因爲它需要內存? – Federico 2014-11-03 15:04:04
@Federico奇怪。這段代碼解決了我的問題。如果可能,請發佈您的服務和廣播接收器代碼 – 2014-11-04 05:41:40
@Federico但在我的情況下,錯誤是一致的(總是在重新啓動後強制停止) – 2014-11-04 05:43:02