Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 异步任务大量使用_Android_Android Asynctask - Fatal编程技术网

Android 异步任务大量使用

Android 异步任务大量使用,android,android-asynctask,Android,Android Asynctask,AsyncTask被设计成一个围绕线程和处理程序的助手类,并不构成通用线程框架。 AsyncTasks最好用于短期操作(几秒钟 顶多。) 这就是它在文档中所说的 说网络语言,‘几秒钟’有多长 我的应用程序将执行以下操作:从DB获取数组列表,将其发送到服务器,获取另一个列表(json),发送一个确认它收到了该列表,解析json,将该列表插入DB,在DB中执行一些其他过程,更新UI。。(列表最多可包含5000-1000个对象实例条目。) 对这些东西使用asynctask是个好主意吗?我还需要根据服务

AsyncTask被设计成一个围绕线程和处理程序的助手类,并不构成通用线程框架。 AsyncTasks最好用于短期操作(几秒钟 顶多。)

这就是它在文档中所说的

说网络语言,‘几秒钟’有多长

我的应用程序将执行以下操作:从DB获取数组列表,将其发送到服务器,获取另一个列表(json),发送一个确认它收到了该列表,解析json,将该列表插入DB,在DB中执行一些其他过程,更新UI。。(列表最多可包含5000-1000个对象实例条目。)

对这些东西使用asynctask是个好主意吗?我还需要根据服务器响应的结果更新gui


如果没有,我还有其他选择吗?

我已经做过类似的事情了。我下载了一堆图像(大约5000张),保存在SD卡中,并在数据库中保存了一行。 我使用了异步任务,没有任何问题,而且我认为使用它没有问题。我建议您使用进度条向用户显示应用程序正在执行的操作,并带有取消任务的选项(AsyncTask提供了一种取消机制)

请参见以下答案:

总之,长期运行的异步任务可能由于其实现而导致内存泄漏。它还可能导致方向改变问题。

这就是我的理解。 事实上,AsyncTask主要与UI相关。例如,OnPostExecute是在UI线程中执行的

因此,在我的理解中,如果用户可以合理地等待操作结束,那么可以安全地使用AsyncTask


要知道你的任务是否符合条件,最好的办法是试一试。

关于屏幕方向:

在阅读了本页的答案后,我意识到我的应用程序在运行AsyncTask时无法处理方向更改

以下是我对这个问题的解决方案:

@Override
protected void onPreExecute() {
    Device.lockOrientation((Activity)context);
    ...
}

@Override
protected void onPostExecute(List<Hydrant> hydrants) {
    Device.releaseOrientation((Activity)context);
    ...
}

由于AsyncTasks只能运行几秒钟,这是我可以接受的解决方案,因为这很少会影响用户。特别是在一段对话中,她很好地指出了她需要等待多长时间

好的@ACDias,看起来很有希望,,据我所知,asynctask可以处理我将要执行的任务量,因为我的任务量只是文本,而不是图像。少数任务量很少超过一个数量级。您描述的内容似乎很长,这意味着您将让用户退出活动,并期望在后台完成治疗。异步任务在这里似乎不合适。I+1 gunar和推荐及意向服务该死的“少数人很少超过一个数量级”是什么意思?这将在后台无声完成,用户不会离开应用程序@njzk2“很少有几个数量级超过一个数量级”=>比如10左右。我知道,除此之外,用户往往会以这样或那样的方式退出应用程序,这将导致问题,从你的线程被终止到你的活动被泄露的上下文。意向服务在您的情况下更合适。
public class Device {

    public static void lockOrientation(Activity activity) {
        Display display = ((WindowManager) activity.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
        int rotation = display.getRotation();
        int tempOrientation = activity.getResources().getConfiguration().orientation;
        int orientation = 0;
        switch(tempOrientation)
        {
        case Configuration.ORIENTATION_LANDSCAPE:
            if(rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_90)
                orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
            else
                orientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE;
            break;
        case Configuration.ORIENTATION_PORTRAIT:
            if(rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_270)
                orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
            else
                orientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT;
        }
        activity.setRequestedOrientation(orientation);
    }

    public static void releaseOrientation(Activity activity) {
        activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
    }

}