Android 服务与主要活动沟通

Android 服务与主要活动沟通,android,service,mapfragment,Android,Service,Mapfragment,我有一个活动,它填充了一个框架布局,并在上面填充了一个MapFragment。地图标记应该每隔几分钟更新一次,所以我想我可以使用服务来生成http请求 问题是,此服务(尚未实现)如何通信或更新my MapFragment的UI和一些主要活动的UI?您可以通过注册广播接收器从服务更新活动/片段 您可以从服务处收到活动的更新,请参阅此反例以获取相关帮助 CounterUpdates.java package yourPackage; public class CounterUpdates {

我有一个活动,它填充了一个框架布局,并在上面填充了一个MapFragment。地图标记应该每隔几分钟更新一次,所以我想我可以使用服务来生成http请求


问题是,此服务(尚未实现)如何通信或更新my 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);
    }
}
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;
    }
}
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);
    }

}
CounterService.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);
    }
}
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;
    }
}
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);
    }

}
AndroidManifest.xml(注册您的服务)

YourActivity.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);
    }
}
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;
    }
}
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);
    }

}

我希望它能起作用,祝你好运:)

虽然这个链接可以回答这个问题,但最好在这里包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,则仅链接的答案可能无效