【发布时间】:2016-03-29 03:20:50
【问题描述】:
我正在尝试在AsyncTask 内部实现一些东西,例如this。
@Override
protected void onPreExecute() {
super.onPreExecute();
...
// prevent screen sleep
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
@Override
protected void onPostExecute(List<Result> results) {
super.onPostExecute(results);
getWindow().clearFlag (WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
...
}
但我在 Android Studio 中收到错误“Cannot resolve method getWindow()”。我错过了什么?
更新
我的 AsyncTask 的构造函数是:
public MyTask(ProgressDialog pDlg) {
progressDlgReference = new WeakReference<>(pDlg);
progressDlg = progressDlgReference.get();
context = progressDlg.getContext();
...
}
我尝试将context 转换为Activity,但((Activity) context).getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 出现运行时错误?
【问题讨论】:
-
runOnUIThread() 尝试使用它
-
@ArmasCyndromic 没有理由将
runOnUiThread()与AsyncTask一起使用,因为它已经提供了在主Thread上运行代码的方法 -
@codeMagic true 有一些方法用于在主线程上运行代码。我相信 runOnUiThread() 是可以访问主线程的方法,甚至可以根据需要形成一些后台任务,例如异步任务中的 doInBackground()。
-
@ArmasCyndromic 是的,但我已经看到它给人们带来了太多问题,这是不必要的,因为创建
AsyncTask是为了解决这些问题。如果您需要在任务完成之前从doInBackground()更新 UI,那么当您可以简单地调用publishProgress()时,没有理由使用该代码引入更复杂并且可能引入更多错误。如果任务完成,那么显然会调用onPostExecute()来更新UI。
标签: android android-studio android-asynctask