gpt4 book ai didi

android - AsyncTask 应该是静态的还是无关紧要?

转载 作者:行者123 更新时间:2023-11-30 03:07:03 26 4
gpt4 key购买 nike

在尝试使它与我的 ListFragment 一起工作时,我阅读了很多有关 AsyncTask 的内容。现在我看到几篇文章说由于技术原因它必须是静态的。其他文章说这对我来说无关紧要,因为我无法为静态创建正确的语法,所以我让我的类成为非静态的。如果建议将其设为静态,请帮我更改它。

我的类(class):

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() 的内容。

最佳答案

请阅读:

Is AsyncTask really conceptually flawed or am I just missing something?

非静态内部类的实例确实包含对包含类的封闭实例的引用;如果包含类是一个 Activity ,则在任务终止之前, Activity 和引用的 View 都不能被释放。

OTOH,如果您传递对 Activity 的显式引用(例如作为监听器),这不会有任何改善。

我的建议是记住,从 MVC(Model-View-Controller)的角度来看,Activity 是一个 Controller,而异步操作很可能属于模型,连同必须在更改屏幕方向等事件中幸存下来的数据。 (View 是通过 xml 定义的 View 层次结构,您可以创建自己的 View 类,但通常您只是重用现有的。)

也就是说,不要将应用程序逻辑放在 Activity 中,而是为此创建一个特殊的类。

关于android - AsyncTask 应该是静态的还是无关紧要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21623838/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com