从活动将对象传递给IntentService

时间:2014-08-10 20:38:19

标签: java android service gps

为了节省我的应用程序中的电池,我决定使用“新的”Fused位置。但是我需要将一些参数传递给接收GPS更新的服务。下面的方式可以工作(putExtras(...)),但我需要制作很多类Serializable / Parseable,这将是一个痛苦。

我已经四处搜索并找到了使用Binder的其他方法,但无法弄清楚如何让它工作。是使用Binder的唯一途径还是另一种?

如果有任何不清楚的地方,请告诉我们。 谢谢。

public class LocationService extends IntentService {
    ...
    public LocationService(StartActivity startActivity, DatabaseSQLite db, HomeFragment homeFragment) {
        super("Fused Location Service");
        ...
    }

   @Override
   public int onStartCommand(Intent intent, int flags, int startId) {
   db = (DatabaseSQLite) intent.getExtras().get("DatabaseSQLite");

   ...
   return START_REDELIVER_INTENT;

    }
}

这就是我在我的活动中使用它的方式:

@Override
    public void onConnected(Bundle bundle) {
        mIntentService = new Intent(this, LocationService.class);
        mIntentService.putExtra("DatabaseSQLite", database);
        ...
        mPendingIntent = PendingIntent.getService(this, 1, mIntentService, 0);

}

1 个答案:

答案 0 :(得分:2)

您应该查看https://github.com/greenrobot/EventBus

可以在此处找到示例:http://awalkingcity.com/blog/2013/02/26/productive-android-eventbus/

基本上可以让你做类似的事情:

@Override
    public void onConnected(Bundle bundle) {
        mIntentService = new Intent(this, LocationService.class);

        // could be any object
        EventBus.getDefault().postSticky(database);
        ...
        mPendingIntent = PendingIntent.getService(this, 1, mIntentService, 0);

}

无论什么时候需要对象

public class LocationService extends IntentService {
    ...
    public LocationService(StartActivity startActivity, DatabaseSQLite db, HomeFragment homeFragment) {
        super("Fused Location Service");
        ...
    }

   @Override
   public int onStartCommand(Intent intent, int flags, int startId) {

   // could also be in Broadcast Receiver etc..
   db = EventBus.getDefault().getStickyEvent(DatabaseSQLite.class); 

   ...
   return START_REDELIVER_INTENT;

    }
}

不仅更简单,此链接还表明它优于其他方法:http://www.stevenmarkford.com/passing-objects-between-android-activities/