0
我有一个活动通过获取函数与后台服务的数据成员进行通信并直接访问它。问题是,我似乎无法访问实际的数据成员。例如,我尝试获得一个ArrayList,其中包含一些项目,但我只收到一个空的ArrayList。后台服务的访问数据成员
此代码几乎直接来自Android Service类doc中的本地服务教程。
这里是我的服务:CommunicationService
public static final String BROADCAST_ALARM = "Alarm";
private Intent mAlarmBroadcast = new Intent(BROADCAST_ALARM);
private AlarmList mAlarms;
class TempTask extends AsyncTask<String, Void, Void> {
private int id = 0;
@Override
protected Void doInBackground(String... params) {
while (true) {
mAlarms.addAlarm(++id, "Description", "Label");
sendBroadcast(mAlarmBroadcast);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
}
}
}
@Override
public void onCreate() {
super.onCreate();
mAlarms = new AlarmList();
new TempTask().execute("test");
}
public AlarmList getAlarmList() {
return mAlarms;
}
这是我的束缚活动:
private CommunicationService mComService = null;
private IconicAdapter mListAdapter;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.alarm_list);
mListAdapter = new IconicAdapter(this, R.layout.row, R.id.label);
setListAdapter(mListAdapter);
// Attempt to bind with the service.
bindService(new Intent(this, CommunicationService.class), mOnService, BIND_AUTO_CREATE);
}
/*
* Receives broadcasts from the bound service.
*/
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action != null) {
if (action.equals(CommunicationService.BROADCAST_ALARM)) {
AlarmList alarmList = mComService.getAlarmList();
ArrayList<Alarm> alarms = alarmList.getAllAlarms();
/* THIS IS WHERE THE PROBLEM EXISTS.
* alarms is an ArrayList of size 0, where as if you break
* over the actual data member in the service class, it is
* full of elements.
*/
mListAdapter.addAll(alarms);
}
}
}
};
private ServiceConnection mOnService = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder binder) {
mComService = ((CommunicationService.LocalBinder) binder).getService();
appendAlarms();
}
@Override
public void onServiceDisconnected(ComponentName name) {
// This is called when the connection with the service has been
// unexpectedly disconnected -- that is, its process crashed.
mComService = null;
}
};
作为一个方面说明,要停止已使用startService(Intent intent)开始的服务,您必须确保它未绑定到任何ServiceConnection,然后对其调用stopService(Intent intent)。 – mdupls 2010-08-05 14:22:59