如何预加载活动?

时间:2011-11-19 10:25:35

标签: android android-activity load preload

我到处寻找这个,但似乎没有人有答案。

我的简单问题是:

有预加载活动的方法吗?我需要这个,因为我使用了一个标签,一个标签有多个活动。我的一个活动是rss阅读器,加载非常困难(大约2-3秒)。

我在网上找到的只是一个笑话。每个人都有一个意见,但没有人能指出你的示例代码。等待回答,谢谢!

这是加载Feed的代码:

At onCreate:
// go get our feed!
        feed = getFeed(RSSFEEDOFCHOICE);

        // display UI
        UpdateDisplay();

        countdown();


And the functions:

private RSSFeed getFeed(String urlToRssFeed)
    {
        try
        {
            // setup the url
           URL url = new URL(urlToRssFeed);

           // create the factory
           SAXParserFactory factory = SAXParserFactory.newInstance();
           // create a parser
           SAXParser parser = factory.newSAXParser();

           // create the reader (scanner)
           XMLReader xmlreader = parser.getXMLReader();
           // instantiate our handler
           RSSHandler theRssHandler = new RSSHandler();
           // assign our handler
           xmlreader.setContentHandler(theRssHandler);
           // get our data via the url class
           InputSource is = new InputSource(url.openStream());
           // perform the synchronous parse           
           xmlreader.parse(is);
           // get the results - should be a fully populated RSSFeed instance, or null on error

           return theRssHandler.getFeed();
        }
        catch (Exception ee)
        {
            // if we have a problem, simply return null
            return null;
        }
    }


private void UpdateDisplay()
    {
        TextView feedtitle = (TextView) findViewById(R.id.feedtitle);
        TextView feedpubdate = (TextView) findViewById(R.id.feedpubdate);
        ListView itemlist = (ListView) findViewById(R.id.itemlist);


        if (feed == null)
        {
            feedtitle.setText("No RSS Feed Available");
        return;
        }

        feedtitle.setText(feed.getTitle());
        feedpubdate.setText(feed.getPubDate());

        ArrayAdapter<RSSItem> adapter = new ArrayAdapter<RSSItem>(this,android.R.layout.simple_list_item_1,feed.getAllItems());

        itemlist.setAdapter(adapter);

        itemlist.setOnItemClickListener(this);

        itemlist.setSelection(0);

        }

2 个答案:

答案 0 :(得分:1)

您必须在活动的OnCreate函数中使用Asyc Task http://developer.android.com/reference/android/os/AsyncTask.html。 并且记住你必须创建一个接口(这里我使用EVRequestCallback),你需要在完成rss加载后更新Activity的UI。下面是RSS feed的异步任务的示例代码。

public class RetrieveRssAsync {


        public RetrieveRssAsync(Context ct,EVRequestCallback gt)
        {

        }

          public static abstract class EVRequestCallback {
                public abstract void requestDidFail(ArrayList<EventItem> ei);
                public abstract void requestDidLoad(ArrayList<EventItem> ei);
          }
          public static class RetrieveEventFeeds extends AsyncTask<Void, Void, ArrayList<EventItem>>
        {
              Context mContext;
              private EVRequestCallback mCallback;
            public RetrieveEventFeeds(Context ct,EVRequestCallback gt)
            {
                mContext= ct;
                mCallback=gt;
            }
            private ProgressDialog progress = null;

            @Override
            protected ArrayList<EventItem> doInBackground(Void... params) {

                return retrieveRSSFeed("--URL of RSS here--",this.mContext);


            }

            @Override
            protected void onCancelled() {
                super.onCancelled();
            }

            @Override
            protected void onPreExecute() {
                progress = ProgressDialog.show(
                        mContext, null, "Loading ...",true,true);

                super.onPreExecute();
            }

            @Override
            protected void onPostExecute(ArrayList<EventItem> result) {
            //setListAdapter();
                mCallback.requestDidLoad(result);
                progress.dismiss();
                //Toast.makeText(this.mContext, "current done", Toast.LENGTH_SHORT).show();
                super.onPostExecute(result);
            }

            @Override
            protected void onProgressUpdate(Void... values) {
                super.onProgressUpdate(values);
            }
        }


    }

答案 1 :(得分:0)

博客“Styling Android”提供了详细示例,说明如何执行后台任务。 FYI。

链接:

Android样式&gt;后台任务 - 第1部分 - http://blog.stylingandroid.com/archives/833
造型Android - http://blog.stylingandroid.com/