我已经有8天的相同问题了,我希望有人可以帮助我,我正在解析多个RSS提要并将它们显示在带有片段的listview上的应用程序,但问题在于UI被阻止2到4秒,并且每次用户触摸屏幕时,应用程序都会崩溃。 我跟踪了这个问题,发现我不得不异步使用这些数据,但实际上,每当我有一个片段时,都会发生同样的问题。 实际上,如果它从主线程中获取数据,则会阻塞该数据块,而我实际上是异步导入数据的,这就是为什么我无法获取阻塞的原因。片段和AsyncTask
这是我改变我的代码,这是我的接口
public interface OnTaskFinishedListener {
void onTaskFinished(ArrayList<Article> articles);
}
我收到的ArrayList中的AsyncTask这样
public class AndroidSaxFeedParserAsync extends AsyncTask<String, Long,ArrayList<Article>> {
ArrayList<Article> rssItems = new ArrayList<Article>();
public URL feedUrl;
OnTaskFinishedListener onTaskFinishedListener;
public AndroidSaxFeedParserAsync(OnTaskFinishedListener _onTaskFinishedListener)
{
onTaskFinishedListener = _onTaskFinishedListener ;
}
@Override
protected void onPostExecute(ArrayList<Article> result) {
super.onPostExecute(result);
onTaskFinishedListener.onTaskFinished(result);
}
@Override
protected ArrayList<Article> doInBackground(String... params) {
//....
return rssItems;
}
}
,最后我在这里把它在我的片段像这
public class FeedPlayerIndexFragment extends SherlockFragment implements OnTaskFinishedListener{
String url="http://www.whatever.com/index.php?format=feed&type=rss";
ArrayList<Article> feeds;
ItemAdapterArticle lfa;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
new AndroidSaxFeedParserAsync(new OnTaskFinishedListener() {
@Override
public void onTaskFinished(ArrayList<Article> articles) {
}
}).execute(url);
View view=inflater.inflate(R.layout.main, container, false);
//....
return view;
}
@Override
public void onTaskFinished(ArrayList<Article> articles) {
lfa = new ItemAdapterArticle(getActivity().getApplicationContext(), articles);
}
}
我试过代码,但ArrayList在Fragment中返回null,你能为我写代码吗? –
@ user1664332,我不能为你写代码,我不是自由职业者。我给了你一个解决方案的想法,现在你的工作就是实现它。如果你还没有完全理解这个想法,请随时提出任何问题。 – Egor
你能不能更清楚一点,所以我可以自己实现它,让我遵循的步骤,我会尝试,直到现在我使我的接口,使片段实现它,我做了一个构造函数AsyncTask(OnTaskFinishedListener),所以现在我有两个onTaskFinished方法在片段之一执行的接口和第二个由于AsyncTask的片段调用和finallt我打电话的onTostkFinished()在asyncTask的onPostExecute(),但我没有结果。 –