2016-09-28 9 views
0

Я пытаюсь иметь две службы, которые контролируют друг друга. Если один из них не запущен, я хочу повторно создать его в службе резервного копирования.Услуги мониторинга друг друга

Я знаю, что могу использовать AlarmManager для наблюдения за ними каждые x секунд, но как я могу контролировать их, если служба работает?

я делаю что-то вроде этого, но моя служба не отображается:

ActivityManager manager = (ActivityManager) context.getSystemService(ACTIVITY_SERVICE); 
for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) 
{ 
    if(ServiceObserverOne.class.getName().equals(service.service.getClassName())) 
    { 
     return true; 
    } 
} 

ответ

0

вы можете попробовать создать две удаленные службы, объявить их в Manifest.xml

<service 
    android:name="ServiceOne" 
    android:process=":remote" > 
    <intent-filter> 
     <action android:name="***.ServiceOne" /> 
    </intent-filter> 
</service> 

<service 
    android:name="ServiceTwo" 
    android:process=":remote" > 
    <intent-filter> 
     <action android:name="***.ServiceTwo" /> 
    </intent-filter> 
</service> 

затем создайте статический метод в MainActivity, который может проверить состояние службы (услуга должна быть перезапущена, если она возвращает false):

public static boolean isServiceWorked(Context context, String serviceName) { 
    ActivityManager myManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 
    ArrayList<RunningServiceInfo> runningService = (ArrayList<RunningServiceInfo>) myManager.getRunningServices(Integer.MAX_VALUE); 
    for (int i = 0; i < runningService.size(); i++) { 
     if (runningService.get(i).service.getClassName().toString().equals(serviceName)) { 
      return true; 
     } 
    } 
    return false; 
} 

последний шаг пытаются контролировать serviceOne когда ServiceTwo начинает работу:

public class ServiceTwo extends Service { 

public final static String TAG = "com.example.ServiceTwo"; 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    Log.e(TAG, "onStartCommand"); 

    thread.start(); 
    return START_REDELIVER_INTENT; 
} 

Thread thread = new Thread(new Runnable() { 

    @Override 
    public void run() { 
     Timer timer = new Timer(); 
     TimerTask task = new TimerTask() { 

      @Override 
      public void run() { 
       Log.e(TAG, "ServiceTwo Run: " + System.currentTimeMillis()); 
       boolean b = MainActivity.isServiceWorked(ServiceTwo.this, "***.ServiceOne"); 
       if(!b) { 
        Intent service = new Intent(ServiceTwo.this, ServiceOne.class); 
        startService(service); 
       } 
      } 
     }; 
     timer.schedule(task, 0, 1000); 
    } 
}); 
} 

ServiceOne такая же, как ServiceTwo ... надеюсь, что это может помочь вам ..

Смежные вопросы