【问题标题】:Android async task in service freezes UI服务中的 Android 异步任务冻结 UI
【发布时间】:2015-05-07 18:56:51
【问题描述】:

我有一个正在运行异步任务的服务。 此任务导致我的 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(); 

有什么建议吗?

【问题讨论】:

  • 猜测可能是 connect 方法中的某些内容已同步并锁定了 beaconManager 实例,那么如果您尝试从主线程调用另一个 beaconManager 方法,它可能会冻结它跨度>

标签: android user-interface asynchronous service freeze


【解决方案1】:

您的代码看起来不错,问题可能出在您使用的 API 或您未向我们展示的代码中。你可以在谷歌上找到类似的问题:

https://github.com/Estimote/Android-SDK/issues/104

因此,如果您在 onBeaconsDiscovered 中执行任何繁重的操作,请将其移至单独的线程 - 实际上是 AsyncTask,我想可以从 UI 线程调用 beaconManager.connect。

【讨论】:

    猜你喜欢
    • 2015-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-12
    • 1970-01-01
    • 1970-01-01
    • 2020-05-10
    相关资源
    最近更新 更多