1
我正在使用AltBeacon
信標掃描庫來掃描信標。我在服務中啓動信標掃描器,在啓動時或藍牙狀態發生變化時由廣播接收器調用。當我打開應用程序並再次退出時,BeaconHandler
被殺死並重新啓動,因爲信標服務再次調用廣播接收器。AltBeacon在應用程序關閉時繼續掃描
問題是我不希望信標掃描儀在退出我的應用程序時被重置,因爲我將所有掃描的信標保存在ArrayLis
t中,並且需要跟蹤建築物中用戶的移動。所以當我退出應用程序時,我的Arraylist
被清除,並且我忘記了用戶的移動。
我的後臺服務:
public class BeaconService extends Service {
private static final String TAG = "BeaconService";
private BeaconHandler beaconHandler;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
Log.e(TAG, "onCreate()");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.e(TAG, "onStartCommand()");
beaconHandler = BeaconHandler.getInstance(getApplicationContext(),
BeaconHandler1.getInstance(getApplicationContext()),
BeaconHandler2.getInstance(getApplicationContext()));
return START_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
Log.e(TAG, "onDestroy()");
beaconHandler.stopListening();
sendBroadcast(new Intent(this, BluetoothReceiver.class));
}
}
我的廣播接收器:
public class BluetoothReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.e("BluetoothReceiver", "onReceive()");
if (BeaconManager.getInstanceForApplication(context).checkAvailability()) {
context.startService(new Intent(context, BeaconService.class));
} else {
context.stopService(new Intent(context, BeaconService.class));
}
}
}
正如你可以看到,信標處理程序是一個單例類,所以只有一個當時正在運行的實例。有沒有辦法阻止信標掃描器重置,並在應用程序關閉時清除我的ArrayList
?
嗨,是的,我知道我無法阻止應用程序在內存不足時被殺死。我已經想過使用共享首選項,但是列表中有很多條目要保存,如果這樣做會生效,它會佔用大量空間或花費很長時間來編寫和讀取所有數據back – qwertz
如果用戶點擊後退按鈕關閉,你是說你不關心應用程序是否被OS關閉或關閉,你只希望服務繼續運行,而不是在手動重新啓動時重新啓動? – davidgyoung
正好當用戶退出應用程序並在tge最近應用程序列表中關閉它時 – qwertz