В настоящее время я использую 2 приложения в моем приложении:
1: LocationService , в основном пытается локализовать пользователя и стремится остаться в живых только тогда, когда приложение находится на переднем плане.
2: XmppService , который инициирует соединение с сервером xmpp, принимает сообщения, отправляет его, выходит из системы ... и стремится остаться в живых до выхода пользователя из системы.
Я читал довольно много документации, но просто не могу ее прояснить.
У меня утечки при попытке сохранить ссылку на LocationServiceBinder, который используется для вызова моих сервисных функций ( с использованием интерфейсов AIDL ). То же самое для Xmpp. Когда я отменяю привязку, я иногда получаю ANR (, которая выглядит как связанная с тем фактом, что мои привязки / отмены привязки сделаны странным образом, onResume, onRestart ... ).
Все система работает , но я уверен, что это неправильный способ сделать это, и, пожалуйста, я хотел бы следовать за опытными людьми, чтобы вернуться в правую часть силы! :)
Приветствия
UPDATE
Служба «Мое местоположение» привязана при запуске приложения, чтобы как можно быстрее получить позицию пользователя:
if(callConnectService == null) {
callConnectService = new ServiceConnection() {
public void onServiceConnected(ComponentName name, IBinder binder) {
locationServiceBinder = LocationServiceBinder.Stub.asInterface(binder);
try {
global.setLocationBinder(locationServiceBinder);
global.getLocationBinder().startLocationListener();
} catch (Exception e){
Log.e(TAG, "Service binder ERROR");
}
}
public void onServiceDisconnected(ComponentName name) {
locationServiceBinder = null;
}
};
}
/* Launch Service */
aimConServ = new Intent(this, LocationService.class);
boolean bound = bindService(aimConServ,callConnectService,BIND_AUTO_CREATE);
Моя служба Xmpp запускается, когда пользователь входит в систему:
callConnectService = new ServiceConnection () {
public void onServiceConnected(ComponentName name, IBinder binder) {
try {
Log.d(TAG, "[XMPP_INIT] Complete.");
global.setServiceBinder(ConnectionServiceBinder.Stub.asInterface(binder));
//Connect to XMPP chat
global.getServiceBinder().connect();
} catch (Exception e){
Log.e(TAG, "Service binder ERROR ");
e.printStackTrace();
}
}
public void onServiceDisconnected(ComponentName name) {
Log.e(TAG, "Service binder disconnection ");
}
};
/* Launch Service */
Intent aimConServ = new Intent(MMWelcomeProfile.this, XmppService.class);
bound = bindService(aimConServ,callConnectService,Context.BIND_AUTO_CREATE);
и снимите привязку с каждого занятия:
if (callConnectService != null){
unbindService(callConnectService);
callConnectService = null;
}