我现在遇到同样的问题 8 天了,我希望有人可以帮助我,我正在开发一个应用程序,它解析多个 RSS 提要并将它们显示在带有片段的列表视图上,但问题是 UI 被阻塞了 2 到 4秒,并且每次用户触摸屏幕时,应用程序都会崩溃。我跟踪了这个问题,我发现我必须异步带来数据,我确实这样做了,但是每次我有一个片段时,都会出现同样的问题。实际上,如果片段从主线程中获取数据时会阻塞,而我实际上是异步获取数据,这就是为什么我无法获得阻塞的原因。
这就是我更改代码的方式,这是我的界面
public interface OnTaskFinishedListener {
void onTaskFinished(ArrayList<Article> articles);
}
我像这样在 AsyncTask 中获取 ArrayList
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);
}
}