我有一个CPU密集型长时间运行操作(几个小时),我正在使用AsyncTask执行.随着它的继续,它会更新屏幕上的进度条以显示完成任务的百分比.
我发现当我的屏幕进入睡眠状态(超时)时,任务似乎停止了.不确定这是否因为AsyncTask停止或者在尝试更新屏幕时遇到困难(后者我在考虑).
除了永远不让屏幕睡眠,我怎么能阻止我的AsyncTask停止执行?如果这是唯一的方法,那么我如何确保屏幕不睡觉?
编辑:我必须补充一点,我知道这听起来像一个非用户友好的应用程序,由下面的人评论.这是一项非常专业的任务(处理数千个图像文件以比较不同系统上的处理),并由内部的一些用户使用,而不是公开发布.
不确定是否有人会读这个,因为OP已经好几年了,但是我在同一条船上我需要使用唤醒锁用于内部使用的应用程序,并且让屏幕保持不正常(我只需要cpu因此,我可以运行一些指标查询)我只是使用部分唤醒锁; 即:
public class my_frag extends Fragment {
WakeLock wl;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
setRetainInstance(true);
PowerManager pm = (PowerManager) this.getActivity().getSystemService(Context.POWER_SERVICE);
wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakeLock");
//I happen to have it in a button click event based on an async task
//Side note: I should probably be using a Loader for my Async task but this works fine
connectButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (metrics_task != null)
{
Status s = metrics_task.getStatus();
if (s.name().equals("RUNNING")){
if (metrics_task.running){
metrics_task.cancel(true);
connectButton.setText("Start");
metrics_task.running = false;
wl.release(); <--releases it on async stop
}
else{
metrics_task = new start_metrics(ae);
metrics_task.execute();
wl.acquire(); <--starts it on async start
}
}
else{
metrics_task = new start_metrics(ae);
metrics_task.execute();
}
}
else{
metrics_task = new start_metrics(ae);
metrics_task.execute();
}
}
});
Run Code Online (Sandbox Code Playgroud)
这很好用,没有任何问题
| 归档时间: |
|
| 查看次数: |
18020 次 |
| 最近记录: |