Ama*_*mal 3 android android-asynctask
在阅读AsyncTask文档,关于线程规则的部分时,我发现了这个:
- 必须在UI线程上加载AsyncTask类.这是从JELLY_BEAN开始自动完成的.
- 必须在UI线程上创建任务实例.
- 必须在UI线程上调用execute(Params ...).
"装载"是什么意思?它没有实例化或执行,因为文档稍后讨论了这些.
我不相信这个答案实际上是正确的.
如果文档实际上是相同的,那么单独列出实例化和加载文档是没有意义的.我相信这句话
必须在UI线程上加载AsyncTask类.
是指Java类加载.换句话说,AsyncTask 类本身需要加载到主线程上.在Jelly Bean(或更高版本)中,这是自动的.但是,在旧版本的Android中,有可能将此类加载到另一个线程上,这可能会导致问题.
有关详细信息,请参阅此Google讨论.基本上,有些条件(例如,代码使用IntentService)可能导致AsyncTask首次加载错误的(非主要)线程.
在Jelly Bean之前,最简单的解决办法似乎是使用类似的东西:
Class.forName("android.os.AsyncTask");
Run Code Online (Sandbox Code Playgroud)
在Application的onCreate()方法中,强制类加载发生在你想要的时候.
创建的AsyncTask实例可能是你认为它是......它实例:
MyAsyncTask task = new MyAsyncTask();
Run Code Online (Sandbox Code Playgroud)
这也应该在主线程上运行.