我正在開發一個android應用程序,它創建一個使用gps更新移動設備位置的android服務。它與定時器一起工作,在'x'時間內刷新位置。與Android服務通信
問題是我想通過應用程序的一個活動與本地android服務通信,因爲我想在需要時更改刷新時間('x')。那麼,我該怎麼做呢?
一個可能的解決方案是停止服務,然後在每次更新時間刷新時再次啓動,但我認爲這不是最佳解決方案。
任何暗示,幫助,請問?
我正在開發一個android應用程序,它創建一個使用gps更新移動設備位置的android服務。它與定時器一起工作,在'x'時間內刷新位置。與Android服務通信
問題是我想通過應用程序的一個活動與本地android服務通信,因爲我想在需要時更改刷新時間('x')。那麼,我該怎麼做呢?
一個可能的解決方案是停止服務,然後在每次更新時間刷新時再次啓動,但我認爲這不是最佳解決方案。
任何暗示,幫助,請問?
它會幫助你,你在服務做到這一點,將刷新這個方法您的位置
Timer timer = new Timer("Refresh Time");
timer.schedule(RefreshTask, 1000L, 60 * 1000L);
private TimerTask refreshTask = new TimerTask() {
@Override
public void run() {
Log.i(TAG, "Update time here");
}
};
如果是同一過程中,空間內(同一個應用程序/ .apk文件),你可以建立一個簡單的服務連接 在您的活動,包括類似如下:
private ServiceConnection _svcConnection = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName arg0) {
_myService = null;
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
_myService = ((MyService.LocalBinder) service).getService();
if(!_myService.IsRunning())
_myService.Start();
}
};
@Override
protected void onResume() {
bindService(new Intent(Main.this, MyService.class), _svcConnection
BIND_AUTO_CREATE);
startService(new Intent(Main.this, MyService.class));
super.onResume();
}
@Override
protected void onPause() {
unbindService(_svcConnection);
super.onPause();
}
的服務需求粘結劑:
private final IBinder _Binder = new LocalBinder();
@Override
public IBinder onBind(Intent arg0) {
return _Binder;
}
/**
* Class for clients to access. Because we know this service always runs in
* the same process as its clients, we don't need to deal with IPC.
*/
public class LocalBinder extends Binder {
public MyService getService() {
return MyService.this;
}
}
然後你可以使用_MyService對象並調用它的任何方法。 (例如註冊回調或請求位置更新),但請注意,如果服務連接失敗,_MyService變量將爲空!
_MyService.SetInterval(4);
如果您需要從另一個應用程序(另一個進程)訪問此服務,則必須處理IPC。
我不明白所有的代碼。我有一些問題:如果綁定服務的活動死亡或暫停等,那麼onResume會重新啓動它? – FrioneL
對於活動livecycle,請參閱[Android文檔](http://developer.android.com/reference/android/app/Activity.html)。如果活動是由意圖啓動的,或者從後臺恢復或用戶調用它,則調用OnResume。在該方法中,請求綁定到服務(bindService),並且如果服務當前未運行,則我們要求android系統爲我們啓動它(例如,第一次應用程序啓動)。 OnPause只是將活動中的服務解除綁定,以避免內存泄漏。如果服務不能自行停止或被系統殺死,它將無限期地繼續。 – Vertigo