У меня давно работает Service
, работает отлично, однако через пару часов перестает отвечать (вроде бы выполняется, но это не так). Я хочу узнать, почему/как.
Сбой/ошибка никогда не происходит «по кабелю», поэтому отладка на моем локальном настольном компьютере не работает.
Я также записывал логи на диск, чтобы следить за "потоком" Service
, но сбоев не происходит (MyService
сеть работает, хотя бы раз в 20 секунд, но может быть и намного чаще)
У меня есть рутированное Android-устройство.
В этом устройстве я использую Wi-Fi (IEE802.11) для связи с ESP8266.
Для этого у меня есть служба, которая работает бесконечно. У меня есть действия «старт» и «стоп», чтобы управлять им. Он запускается и останавливается следующим образом:
Основная деятельность:
MyServices mMyServices = null;
boolean mIsBound = false;
onCreate(){
Intent myIntent = new Intent(this, MyServices.class);
startService(myIntent);
bindService(
myIntent,
myServiceConnection,
Context.BIND_AUTO_CREATE
);
}
onDestroy(){
unbindService(myServiceConnection);
stopService(new Intent(this, MyServices.class));
}
private final ServiceConnection mServiceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
MyServices.MyBinder binder = (MyServices.MyBinder) service;
mMyServices = binder.getService();
mIsBound = true;
}
@Override
public void onServiceDisconnected(ComponentName name) {
mIsBound = false;
}
};
MyService
имеет длину более 3 тыс. строк, он не имеет блокирующих операций сам по себе, но содержит Thread
, которые, кажется, работают правильно, даже когда MyService
перестает реагировать на «связанные действия».
МойСервис:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return Service.START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}
private final IBinder mBinder = new MyBinder();
public class MyBinder extends Binder {
public MyServices getService() {
return MyServices.this;
}
}
As far as I can tell, when the "bug" happens, is when I bind an Activity
(several may be bound at once), then goes to background, after a couple hours, when a "Bound Activity" that was not on foreground goes to foreground, nothing happens, no Logs, no error, application just hangs, and ANR (Application Not Responding) message appears, and prompts to kill the application.
Обновление 25.10.2016
All binds have been removed and tested. The Service will halt operations, with no signs of the source of the failure at around 40 ~ 500 minutes. The device does a "exception happened" sound, its a Samsung SM-T810 tablet, nothing gets written to logs, no DDMS stacktrace, no path to follow...Я понимаю, что Служба «упала», ее потоки и другие части будут продолжать работать правильно. Похоже, что код на сервисном объекте не запускается, попытки записи на диск так и не увенчались успехом. Отладка по кабелю не дала никакой полезной информации по логам длиной более 1 мб...
Я пытаюсь контролировать устройство через Wi-Fi adb. Как только закончу, выложу результаты
Timer
,TimerTask
,Thread
,Volley
,DatagramSocket
,Process
,LocalBroadcastManager
,BroadcastReceiver
,WifiManager
,IBinder
. Все они являются внутреннимиObject
этогоService
, все они работают корректно, даже когда само приложение дает сбой или ожидает ANR. Насколько я могу судить, это проблема привязки, скорее всего, во всех/любых действиях, которые привязываются/уничтожаются/не обрабатываются правильно. - person Bonatti   schedule 25.10.2016