Я пытаюсь разработать службу Android, которая может автоматически перезапускаться при исключениях.
- Я попытался добавить
return START_STICKY;
в методonStartCommand
. Но поскольку исключение не приведет к сбою службы, она не перезапустится автоматически. - Я также пробовал методы, упомянутые в Как перезапустите службу в Android, чтобы снова вызвать службу oncreate, например, собрать следующий код, но после вызова
onDestory()
выполняется толькоonCreate()
, но неonStartCommand()
stopService(new Intent(this, YourService.class)); startService(new Intent(this, YourService.class));
На данный момент сервис выглядит так:
public class PostService extends Service {
site.bdsc.raspberry_gps_test.sim800Cutil.Sim800Manager Sim800Manager;
private Thread thTestPost;
private boolean mRunning;
private static String TAG = "PostService";
public PostService() {
}
@Override
public void onCreate(){
//get service
thTestPost = new Thread(testPost,"testPost");
Log.d(TAG,"Service on create");
}
@Override
public int onStartCommand(Intent intent,int flags,int startId){
if (!mRunning) {
// Prevent duplicate service
mRunning = true;
Log.d(TAG,"Starting Post Service");
try {
Sim800Manager = Sim800ManagerImpl.getService("UART0");
} catch (IOException e) {
restartService(); //want to restart service here
}
thTestPost.start();
}else{
Log.d(TAG,"Duplicated Start Request!");
}
return START_STICKY;
}
@Override
public void onDestroy(){
super.onDestroy();
Log.d(TAG,"Service on destory");
mRunning = false;
thTestPost.interrupt();
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
private Runnable testPost = new Runnable() {
@Override
public void run() {
// some code
}
};
private void restartService(){
stopService(new Intent(this, PostService.class));
startService(new Intent(this,PostService.class));
}
}
Как показано в коде, я хочу, чтобы PostService
правильно перезапускался, когда IOException
перехватывается.
stopSelf()
- person Sam Yu   schedule 25.04.2019this.stopSelf()
в блоке catch иstartService(new Intent(this,PostService.class))
вonDestroy()
послеsuper.onDestroy()
. - person Onik   schedule 25.04.2019