2014-10-31 86 views
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} 

回答

0

我這是怎麼解決這個完全一樣的問題:

//do things you want 
    super.onStartCommand(intent, flags, startId); 
    return START_REDELIVER_INTENT; //this is the ANSWER 
+0

NOP。同樣的錯誤,但不一致。有時服務會繼續運行,有時會被殺死。難道它是刪除它的操作系統,因爲它需要內存? – Federico 2014-11-03 15:04:04

+0

@Federico奇怪。這段代碼解決了我的問題。如果可能,請發佈您的服務和廣播接收器代碼 – 2014-11-04 05:41:40

+0

@Federico但在我的情況下,錯誤是一致的(總是在重新啓動後強制停止) – 2014-11-04 05:43:02