Jee*_*mar 6 android android-asynctask
我想打多个电话AsynTask.它没有用,所以我谷歌寻求帮助.我发现如果我使用AsyncTask.THREAD_POOL_EXECUTOR那么它会起作用.
但它不起作用.
我把它称为如下:
new GetCategory().execute();
new GetArea().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
Run Code Online (Sandbox Code Playgroud)
请帮我解决这个问题.我想一次打电话,或者如果GetArea()打电话也可以GetCategory().我没有收到错误.应用程序可能做了太多工作.
logcat的:
03-13 21:21:43.134: I/Choreographer(1222): Skipped 39 frames! The application may be doing too much work on its main thread.
03-13 21:21:43.394: I/Choreographer(1222): Skipped 43 frames! The application may be doing too much work on its main thread.
03-13 21:21:43.634: I/Choreographer(1222): Skipped 36 frames! The application may be doing too much work on its main thread.
03-13 21:21:43.784: I/Choreographer(1222): Skipped 38 frames! The application may be doing too much work on its main thread.
03-13 21:21:44.004: I/Choreographer(1222): Skipped 56 frames! The application may be doing too much work on its main thread.
03-13 21:21:44.164: I/Choreographer(1222): Skipped 36 frames! The application may be doing too much work on its main thread.
03-13 21:21:45.495: I/Choreographer(1222): Skipped 33 frames! The application may be doing too much work on its main thread.
03-13 21:21:45.765: I/Choreographer(1222): Skipped 43 frames! The application may be doing too much work on its main thread.
03-13 21:21:46.005: I/Choreographer(1222): Skipped 36 frames! The application may be doing too much work on its main thread.
03-13 21:21:46.235: I/Choreographer(1222): Skipped 44 frames! The application may be doing too much work on its main thread.
03-13 21:21:46.525: I/Choreographer(1222): Skipped 48 frames! The application may be doing too much work on its main thread.
03-13 21:21:46.855: I/Choreographer(1222): Skipped 39 frames! The application may be doing too much work on its main thread.
03-13 21:21:47.005: I/Choreographer(1222): Skipped 39 frames! The application may be doing too much work on its main thread.
03-13 21:21:47.156: I/Choreographer(1222): Skipped 37 frames! The application may be doing too much work on its main thread.
03-13 21:21:47.306: I/Choreographer(1222): Skipped 38 frames! The application may be doing too much work on its main thread.
Run Code Online (Sandbox Code Playgroud)
我对两者都有约束力AsynTask.
我的代码:
Area[] areaList = gson.fromJson(result, Area[].class);
List<Area> lList = Arrays.asList(areaList);
Area objArea;
areaId.add("0");
areaName.add("Select Area");
for (int i = 0; i < lList.size(); i++) {
objArea = lList.get(i);
areaName.add(objArea.getAreaName());
areaId.add(objArea.getAreaId());
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
getActivity(), android.R.layout.simple_dropdown_item_1line, areaName);
((Spinner) spnCEArea).setAdapter(adapter);
Run Code Online (Sandbox Code Playgroud)
你不能同时在同一个项目中调用两个.execute()方法的原因AsyncTask是Android引入的修改Gingerbread.在此版本之前,您可以调用.execute()所需的次数,因为每个都是单独运行的Thread.
但是在这个版本中,它们被顺序调用,所以如果一个正在执行,另一个如果你只是打电话就不会启动.execute().
因此,基本上您需要做的就是检查您正在运行的设备的版本,AsyncTask并根据它运行一个或其他命令.
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.HONEYCOMB_MR1)
your_asynctask.execute(your_params);
else
your_asynctask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, your_params);
Run Code Online (Sandbox Code Playgroud)
更多信息在这里.
顺便说一句,这些The application may be doing too much work on its main thread.线与之无关AsyncTask.这些任务正在后台运行,如果你在方法中进行工作doInBackground(),那不是问题.
稍微不同的情况可能是你在你的onPostExecute()任务中做了一些工作,因为这可能与你的主用户界面有关,但是如果不知道你正在运行的代码,我们就无法告诉你更多.
小智 1
我可以使用 2 个异步任务:
new GetCategory().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,"");
new GetArea().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,"");
Run Code Online (Sandbox Code Playgroud)
如果它不起作用并且崩溃,请发布您的 logcat。如果它确实发布了您的代码。
| 归档时间: |
|
| 查看次数: |
1692 次 |
| 最近记录: |