Я реализовал Сервис, и я использую Messenger с его обработчиком в качестве коммуникационного моста. Каждый раз, когда я начинаю деятельность я должен выполнить следующие действия:Каков наилучший способ общения с Сервисом во всех действиях моего приложения без повторения одного и того же кода?
1) создать подключение службы
private ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder service) {
mService = new Messenger(service);
try {
Message msg = Message.obtain(null, ConstantStuff.MSG_REGISTER_CLIENT);
msg.replyTo = mMessenger;
egoService.send(msg);
} catch (RemoteException e) {
Log.e("HELPER", "FAIL - Service crashed" + e.getMessage());
}
}
public void onServiceDisconnected(ComponentName className) {
mService = null;
}
};
2) создать гонец
final Messenger mMessenger = new Messenger(new ActivityOne.IncomingMessageHandler());
class IncomingMessageHandler extends Handler {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case ConstantStuff.MACRO_SEND_PWD:
if (msg.arg1 == 1) {
Log.e("PWD", "SUCCESS");
} else if (msg.arg1 == 0) {
Log.e("PWD", "FAIL");
}
break;
default:
super.handleMessage(msg);
}
}
}
3) связывают услугу моя деятельность
public void doBindService() {
this.bindService(new Intent(this, NetworkService.class), mConnection, Context.BIND_AUTO_CREATE);
isBound = true;
Log.e("HELPER", "DO BIND");
}
4) начать использовать услугу
private void sendPwd(String pwd) {
if (isBound) {
if (mService != null) {
try {
Bundle b = new Bundle();
b.putByte("Command", (byte) ConstantStuff.MACRO_SEND_PWD);
b.putString("Password", password);
b.putString("Param0", password);
b.putString("Param1", "dummy");
b.putString("Param2", "dummy");
b.putString("Param3", "dummy");
Message msg = Message.obtain(null, ConstantStuff.MSG_MACRO);
msg.setData(b);
msg.replyTo = mMessenger;
mService.send(msg);
} catch (Exception e) {}
}
}
}
5) в конце моей задачи отвязать обслуживание от моей деятельности
public void doUnbindService() {
if (isBound) {
if (mService != null) {
try {
Message msg = Message.obtain(null, ConstantStuff.MSG_UNREGISTER_CLIENT);
msg.replyTo = mMessenger;
mService.send(msg);
} catch (RemoteException e) {
Log.e("HELPER", "FAIL - DO UnBIND" + e.getMessage());
}
}
this.unbindService(mConnection);
isBound = false;
Log.e("HELPER", "DO UnBIND");
}
}
Мне нужно сообщить мою службу практически во всех мероприятиях моего приложения, и я хотел бы, чтобы не повторяйте весь код каждый раз. Достаточно ли распространяет все действия на деятельность отца? Можно ли написать весь код связи в «Приложении»?
Связанные части отдыха –
@VyshnavRamesh Не могли бы вы добавить дополнительные детали? – michoprogrammer
В зависимости от того, что вы хотите использовать, вы просто используете «bindService» и его методы обратного вызова «onServiceConnected» и «onServiceDisconnected». –