我在阅读了很多关于AsyncTask的同时尝试使它与我的ListFragment一起工作。现在我遇到了几篇文章,说由于技术原因它必须是静态的。其他文章说,这并不重要,至于我的情况,我不能为静态做出正确的语法,所以我让我的类非静态的。如果建议将其设为静态,请帮助我改变它。AsyncTask应该是静态的还是不重要?
我的课:
private class MyAsyncTask extends AsyncTask<List<String>, Void, List<String>>
{
// List of messages of the rss feed
private List<Message> messages;
private WeakReference<NieuwsSectionFragment> fragmentWeakRef;
private MyAsyncTask(NieuwsSectionFragment fragment)
{
this.fragmentWeakRef = new WeakReference<NieuwsSectionFragment>(fragment);
}
@Override
protected void onPreExecute()
{
super.onPreExecute();
// progress.setVisibility(View.VISIBLE); //<< set here
}
@Override
protected List<String> doInBackground(List<String>... urls)
{
FeedParser parser = FeedParserFactory.getParser();
messages = parser.parse();
List<String> titles = new ArrayList<String>(messages.size());
for (Message msg : messages)
{
titles.add(msg.getTitle());
// Log.w("doInBackground", msg.getTitle());
}
return titles;
}
@Override
protected void onPostExecute(List<String> result)
{
super.onPostExecute(result);
if (result != null)
{
PostData data = null;
listData = new PostData[result.size()];
for (int i = 0; i < result.size(); i++)
{
data = new PostData();
data.postTitle = result.get(i);
listData[i] = data;
Log.w("onPostExecute", "" + listData[i].postTitle);
}
Log.w("onPostExecute", "" + adapter);
adapter = new PostItemAdapter (getActivity(), android.R.layout.simple_list_item_1, listData);
setListAdapter(adapter);
adapter.notifyDataSetChanged();
}
}
}
当我让静态的它给人的适配器上的错误。它说了关于setListAdapter和getActivity()的一些东西。
是asynctask活动的内部类吗? – Raghunandan
不,它是ListFragment的内部类 – Shishi
http://android-developers.blogspot.in/2009/01/avoiding-memory-leaks.html。向下滚动并检查点,并阅读http://stackoverflow.com/questions/3106912/why-does-android-prefer-static-classes – Raghunandan