Как перезапустить сервис в Android? - PullRequest
2 голосов
/ 04 августа 2011

Кто-нибудь знает, как перезапустить службу в Android ?? у меня есть служба, которая вызывается при загрузке устройства .. и у меня есть option.java для сохранения моей конфигурации ..

если я редактирую конфигурацию в option.java, то я должен перезапустить свой сервис, чтобы эффект вступил в силу.

Я знаю только, как запустить службу и после ее запуска, я не знаю, как перезапустить ее после того, как была произведена новая конфигурация .. Любая идея ??

startService(new Intent(this, ListenSMSservice.class));

Ответы [ 3 ]

3 голосов
/ 21 мая 2014

Просто остановите службу и запустите ее снова

stopService(new Intent(this, ListenSMSservice.class));
startService(new Intent(this, ListenSMSservice.class));
1 голос
/ 04 августа 2011

В вашем элементе:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

2) В вашем элементе (не забудьте использовать полное [или относительное] имя класса для вашего BroadcastReceiver):

<receiver android:name="com.example.MyBroadcastReceiver">  
    <intent-filter>  
        <action android:name="android.intent.action.BOOT_COMPLETED" />  
    </intent-filter>  
</receiver>

public class MyBroadcastreceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Intent startServiceIntent = new Intent(context, MyService.class);
        context.startService(startServiceIntent);
    }
}

для уточнения: это

0 голосов
/ 05 августа 2011

Итак, под наблюдаемым наблюдателем шаблоном проектирования я имел в виду использование класса FileObserver , предоставляемого Android.

Например, вот фрагмент из WallPaperManagerService.jav a из исходного кода Android:

Итак, в вашем случае вы должны создать обозреватель файла (см. Пример кода ниже) в файле конфигурации, и каждый раз, когда этот файл конфигурации изменяется, вы будете читать все значения из вашей (уже работающей) службы.

Надеюсь, вы поняли суть идеи.

/**
 * Observes the wallpaper for changes and notifies all IWallpaperServiceCallbacks
 * that the wallpaper has changed. The CREATE is triggered when there is no
 * wallpaper set and is created for the first time. The CLOSE_WRITE is triggered
 * everytime the wallpaper is changed.
 */
private final FileObserver mWallpaperObserver = new FileObserver(
        WALLPAPER_DIR.getAbsolutePath(), CREATE | CLOSE_WRITE | DELETE | DELETE_SELF) {
            @Override
            public void onEvent(int event, String path) {
                if (path == null) {
                    return;
                }
                synchronized (mLock) {
                    // changing the wallpaper means we'll need to back up the new one
                    long origId = Binder.clearCallingIdentity();
                    BackupManager bm = new BackupManager(mContext);
                    bm.dataChanged();
                    Binder.restoreCallingIdentity(origId);

                    File changedFile = new File(WALLPAPER_DIR, path);
                    if (WALLPAPER_FILE.equals(changedFile)) {
                        notifyCallbacksLocked();
                    }
                }
            }
        };
...