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
我解決了。但你給我的答案的主要想法。謝謝。 –