【发布时间】:2015-04-18 10:48:56
【问题描述】:
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
initJourneyStatusList();
adapterJourneyStatus = new ArrayAdapter(getApplicationContext(), android.R.layout.simple_spinner_item,listJourneyStatus) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = super.getView(position, convertView, parent);
((TextView) v).setTypeface(Typeface.createFromAsset(getAssets(), "fonts/calibri.ttf"));
((TextView) v).setTextColor(getResources().getColor(android.R.color.black));
return v;
}
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
View v =super.getDropDownView(position, convertView, parent);
((TextView) v).setTypeface(Typeface.createFromAsset(getAssets(),"fonts/calibri.ttf"));
((TextView) v).setTextColor(getResources().getColor(android.R.color.black));
return v;
}
};
adapterJourneyStatus.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinnerJourneyStatus.setAdapter(adapterJourneyStatus);
return null;
}
}.execute();
我已将此代码插入到 onCreate 函数中。当我运行应用程序时,它仍然很慢而且滞后。当我使用调试器时,它向我显示“应用程序可能在其主线程上做了太多工作。”。有没有其他方法可以在后台执行任务或实现多线程。
【问题讨论】:
-
在 OnPostExecute() 而不是 doInBackground() 中初始化-设置您的适配器
-
@HareshChhelana 是正确的,android 不支持从后台线程访问 UI 组件。不过,这不是解决问题的办法。你读过stackoverflow.com/questions/14678593/…吗?
-
正如其他人所建议的那样,似乎有些问题。尝试在后台线程上调用
setAdapter()应该会崩溃。另外,不要在这里使用getApplicationContext()。关于您所花费的时间,请使用 Traceview 来确定到底出了什么问题。