0
Q
从线程绑定服务
A
回答
0
可以试试这种方式: 先写下你的Service
类。
public class ShowNotifyService extends Service {
private Messenger msg = new Messenger(new ShowNotifyHanlder());
@Override
public IBinder onBind(Intent arg0) {
return msg.getBinder();
}
class ShowNotifyHanlder extends Handler {
@Override
public void handleMessage(Message msg) {
// This is the action
int msgType = msg.what;
switch(msgType) {
case SHOW_FIRST_NOTIFY: {
try {
// Incoming data
String data = msg.getData().getString("data");
Message resp = Message.obtain(null, SHOW_FIRST_NOTIFY_RESPONSE);
Bundle bResp = new Bundle();
bResp.putString("respData", first_notify_data);// here you set the data you want to show
resp.setData(bResp);
msg.replyTo.send(resp);
} catch (RemoteException e) {
e.printStackTrace();
}
break;
}
default:
super.handleMessage(msg);
}
}
}
然后写你的Activity
类。
public class TestActivity {
..
private ServiceConnection sConn;
private Messenger messenger;
..
@Override
protected void onCreate(Bundle savedInstanceState) {
// Service Connection to handle system callbacks
sConn = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
messenger = null;
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// We are conntected to the service
messenger = new Messenger(service);
}
};
...
// We bind to the service
bindService(new Intent(this, ShowNotifyService.class), sConn,
Context.BIND_AUTO_CREATE);
..
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String val = edt.getText().toString();
Message msg = Message.obtain(null, ShowNotifyService.SHOW_FIRST_NOTIFY);
msg.replyTo = new Messenger(new ResponseHandler());
// We pass the value
Bundle b = new Bundle();
b.putString("data", val);
msg.setData(b);
try {
messenger.send(msg);
} catch (RemoteException e) {
e.printStackTrace();
}
}
});
}
// This class handles the Service response
class ResponseHandler extends Handler {
@Override
public void handleMessage(Message msg) {
int respCode = msg.what;
switch (respCode) {
case ShowNotifyService.SHOW_FIRST_NOTIFY_RESPONSE: {
result = msg.getData().getString("respData");
//then you show the result data from service here
}
}
}
}
}
我从here得到了这个想法。
相关问题
- 1. 将远程服务绑定到线程
- 2. 运行绑定服务和线程
- 3. 从服务调用线程
- 4. 绑定服务和线程之间的区别
- 5. Robolectric不会绑定另一个线程的服务
- 6. 将线程执行绑定到前台服务
- 7. android,与子线程解除绑定服务
- 8. Android的本地服务绑定和后台线程
- 9. WCF服务绑定
- 10. Android服务绑定
- 11. Android绑定服务
- 12. 绑定服务BroadcastReceiver
- 13. 绑定WCF服务
- 14. 如何从onLocationChanged服务绑定值Fragemnt
- 15. 从android活动绑定到服务
- 16. 从服务器端绑定int值 - asp.net
- 17. Android远程绑定服务接口
- 18. 不能绑定到远程服务
- 19. 如何从其他尚未绑定的课程中取消绑定服务
- 20. 在Android中绑定未绑定服务
- 21. Ajax绑定vs服务器绑定
- 22. 从后台线程绑定GridView
- 23. Android开始服务或绑定服务
- 24. 的Android绑定服务和AIDL服务
- 25. 通过绑定服务从服务与活动进行沟通
- 26. 在绑定服务中访问远程服务方法
- 27. Silverlight WCF服务绑定错误,“远程服务器..:找不到”
- 28. Executor服务线程
- 29. 线程或服务
- 30. 在特定路线上绑定Laravel服务提供商
如果我不在活动上怎么样? 如果不想从非活动绑定服务,该如何处理? 这可能吗? –
你可以显示你的代码吗? – penkzhou
我解决了。但你给我的答案的主要想法。谢谢。 –