Как запустить службу при загрузке в Android 2.3 (Gingerbread) без сбоев

Я выполнил несколько инструкций о том, как запустить службу при загрузке.

В Android 2.2 все работает нормально.

Я заметил, что в Android 2.3 процесс выходит из строя, и ActivityManager планирует возобновить работу снова и снова.

В моем сервисе я хочу делать что- doSomething() каждые 5 секунд! Для этого я использую TimerTask.

Вот код MyService.java :

 package example.service; import java.util.Timer; import java.util.TimerTask; import android.app.Service; import android.content.Intent; import android.os.IBinder; import android.util.Log; public class MyService extends Service { private static final String TAG = "MyService"; private static final int TIMER_SECONDS = 5; private Timer doSomethingTimer; @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { super.onCreate(); Log.d(TAG, TAG + ": My Service Created"); } @Override public void onDestroy() { super.onDestroy(); Log.d(TAG, TAG + ": My Service Destroyed"); } @Override public int onStartCommand(Intent intent, int flags, int startId) { super.onStartCommand(intent, flags, startId); initDoSomethingTimer(); Log.d(TAG, TAG + ": My Service Started"); return START_STICKY; } private void initDoSomethingTimer() { doSomethingTimer = new Timer(); doSomethingTimer.schedule(new TimerTask() { @Override public void run() { doSomething(); } }, 0, TIMER_SECONDS * 1000); } private void doSomething() { Log.d(TAG, TAG + ": did something!!"); } } 

Вот код MyStartupIntentReceiver.java :

 package example.service; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; public class MyStartupIntentReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Intent serviceIntent = new Intent(); serviceIntent.setAction("example.service.MyService"); context.startService(serviceIntent); } } 

И, наконец, мой файл AndroidManifest.xml :

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="internalOnly" package="example.service" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="10" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <service android:name=".MyService" > <intent-filter> <action android:name="example.service.MyService" /> </intent-filter> </service> <receiver android:name=".MyStartupIntentReceiver" > <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver> </application> </manifest> 

Результат не известен 🙁 После загрузки сервис создается, но не запускается , а затем сбой и расписание ActivityManager перезапускают его – и запускают цикл! Вот что мы видим в Logcat :

 I/ActivityManager( 187): Start proc example.service for service example.service/.MyService: pid=615 uid=10052 gids={} D/MyService( 615): MyService: My Service Created (...) I/Process ( 187): Sending signal. PID: 615 SIG: 9 W/ActivityManager( 187): Scheduling restart of crashed service example.service/.MyService in 59628ms (...) I/ActivityManager( 187): Start proc example.service for service example.service/.MyService: pid=639 uid=10052 gids={} D/MyService( 639): MyService: My Service Created (...) I/Process ( 187): Sending signal. PID: 639 SIG: 9 W/ActivityManager( 187): Scheduling restart of crashed service example.service/.MyService in 238512ms 

Какие-либо предложения?! Я застрял. Я заметил, что другие сервисы помимо этого нового (без timertask) начали сбой в Android 2.3 с теми же ошибками.

Мне кажется, что проблема в том, что у вас недостаточно памяти, поэтому андроид убивает эту услугу и снова запускает ее снова. У меня была эта проблема, когда я пробовал ICS в эмуляторе. Попытайтесь увеличить RAM для вашего AVD (параметр «Размер оперативной памяти» до 512 МБ) в AVD Manager. Напишите, пожалуйста, о результатах.