Android 服务中的异步任务冻结 UI
Android async task in service freezes UI
我有一项服务是 运行 异步任务。
此任务导致我的 UI 冻结(即使它不应该)。
public class StartMonitoringRegionsTask extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
beaconManager.connect(new BeaconManager.ServiceReadyCallback() {
@Override public void onServiceReady() {
try {
for(int i = 0; i <= METRO_VEHICLE_REFERENCE_LIMIT; i++) {
beaconManager.startMonitoring(new Region("vehicle region", PROXIMITY_UUID, i, null));
}
for(int i = METRO_VEHICLE_REFERENCE_LIMIT+1; i <= METRO_STOP_REFERENCE_LIMIT; i++) {
beaconManager.startMonitoring(new Region("stop region", PROXIMITY_UUID, i, null));
}
for(int i = METRO_STOP_REFERENCE_LIMIT+1; i <= BUS_VEHICLE_REFERENCE_LIMIT; i++) {
beaconManager.startMonitoring(new Region("region", PROXIMITY_UUID, i, null));
}
for(int i = BUS_VEHICLE_REFERENCE_LIMIT+1; i <= BUS_STOP_REFERENCE_LIMIT; i++) {
beaconManager.startMonitoring(new Region("stop region", PROXIMITY_UUID, i, null));
}
} catch (RemoteException e) {
Log.i("TAG", "Error while starting monitoring");
}
}
});
return null;
}
}
要开始我调用的任务:
new StartMonitoringRegionsTask().execute();
有什么建议吗?
您的代码看起来不错,问题可能出在您使用的 API 中或您未向我们展示的代码中。您可以在 google 上找到类似的问题:
https://github.com/Estimote/Android-SDK/issues/104
所以如果你在 onBeaconsDiscovered
中做任何繁重的事情然后将它移动到单独的线程 - 实际上 AsyncTask
,我想 beaconManager.connect
可以从 UI 线程调用.
我有一项服务是 运行 异步任务。 此任务导致我的 UI 冻结(即使它不应该)。
public class StartMonitoringRegionsTask extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
beaconManager.connect(new BeaconManager.ServiceReadyCallback() {
@Override public void onServiceReady() {
try {
for(int i = 0; i <= METRO_VEHICLE_REFERENCE_LIMIT; i++) {
beaconManager.startMonitoring(new Region("vehicle region", PROXIMITY_UUID, i, null));
}
for(int i = METRO_VEHICLE_REFERENCE_LIMIT+1; i <= METRO_STOP_REFERENCE_LIMIT; i++) {
beaconManager.startMonitoring(new Region("stop region", PROXIMITY_UUID, i, null));
}
for(int i = METRO_STOP_REFERENCE_LIMIT+1; i <= BUS_VEHICLE_REFERENCE_LIMIT; i++) {
beaconManager.startMonitoring(new Region("region", PROXIMITY_UUID, i, null));
}
for(int i = BUS_VEHICLE_REFERENCE_LIMIT+1; i <= BUS_STOP_REFERENCE_LIMIT; i++) {
beaconManager.startMonitoring(new Region("stop region", PROXIMITY_UUID, i, null));
}
} catch (RemoteException e) {
Log.i("TAG", "Error while starting monitoring");
}
}
});
return null;
}
}
要开始我调用的任务:
new StartMonitoringRegionsTask().execute();
有什么建议吗?
您的代码看起来不错,问题可能出在您使用的 API 中或您未向我们展示的代码中。您可以在 google 上找到类似的问题:
https://github.com/Estimote/Android-SDK/issues/104
所以如果你在 onBeaconsDiscovered
中做任何繁重的事情然后将它移动到单独的线程 - 实际上 AsyncTask
,我想 beaconManager.connect
可以从 UI 线程调用.