我正在進行一項活動,它在其上面填充框架佈局和一個MapFragment。地圖標記應該每隔幾分鐘更新一次,所以我想我可以使用Service來生成http請求。服務和主要活動通信
問題是,該服務(尚未實現)如何能夠傳達或更新我的MapFragment的UI和一些主要活動的UI?
我正在進行一項活動,它在其上面填充框架佈局和一個MapFragment。地圖標記應該每隔幾分鐘更新一次,所以我想我可以使用Service來生成http請求。服務和主要活動通信
問題是,該服務(尚未實現)如何能夠傳達或更新我的MapFragment的UI和一些主要活動的UI?
您可以通過註冊廣播接收器來更新您的活動/片段。
您可以接收來自服務的活動更新,請參閱該反例得到幫助在做這件事。
CounterUpdates.java
package yourPackage;
public class CounterUpdates {
private static CounterUpdates mInstance;
private ICounterUpdates mListener;
private CounterUpdates() {}
public static CounterUpdates getInstance() {
if(mInstance == null) {
mInstance = new CounterUpdates();
}
return mInstance;
}
public void setListener(ICounterUpdates listener) {
mListener = listener;
}
public void onCountUpdate(int count) {
if(mListener != null) {
mListener.onCountUpdate(count);
}
}
// Definition of location updates interface
public interface ICounterUpdates {
public void onCountUpdate(int count);
}
}
CounterService.java
package yourPackage;
import android.app.Service;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
public class CounterService extends Service {
private Handler mHandler = new Handler();
private int mCount = 0;
private static final int INTERVAL = 500;
private Runnable mRunnableCounter = new Runnable() {
@Override
public void run() {
deliverResults(++mCount);
mHandler.postDelayed(this, INTERVAL);
}
};
@Override
public int onStartCommand(final Intent intent, final int flags, final int startId) {
startCounterThread();
return START_STICKY;
}
private void startCounterThread() {
mCount = 0;
mHandler.postDelayed(mRunnableCounter, INTERVAL);
}
private void stopCounterThread() {
mHandler.removeCallbacks(mRunnableCounter);
}
public static void deliverResults(int count) {
CounterUpdates.getInstance().onCountUpdate(count);
}
@Override
public void onDestroy() {
super.onDestroy();
stopCounterThread();
}
@Override
public IBinder onBind(final Intent intent) {
return null;
}
}
AndroidManifest.xml中(註冊爲您服務)
<service android:name="yourPackage.CounterService" />
啓動服務使用此代碼:
startService(new Intent(this, CounterService.class));
YourActivity.java
public class YourActivity extends Activity implements CounterUpdates.ICounterUpdates {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.your_layout);
CounterUpdates.getInstance().setListener(this);
}
@Override
public void onCountUpdate(int count) {
((TextView) findViewById(R.id.textView)).setText("Count: " + count);
}
}
我希望它會工作,好運:)
這枚鏈接可以回答這個問題, 最好在這裏包含答案的基本部分 並提供參考鏈接。 如果鏈接頁面發生更改,則僅鏈接答案可能會失效 – AADProgramming