【问题标题】:Android : how to initialize an activity in background before displaying itAndroid:如何在显示之前在后台初始化活动
【发布时间】:2011-06-30 13:45:31
【问题描述】:

我有一个活动,我在其中显示存储在网站上的图像。 我正在使用以下代码从其 url 获取它并显示活动:

public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    Log.i(TAG, "onCreate");
    setContentView(R.layout.ad_screen);

    AsyncTask<String, Void, Integer> task = new AsyncTask<String, Void, Integer>() 
    {
        /** The system calls this to perform work in a worker thread and
         * delivers it the parameters given to AsyncTask.execute() */
        @Override
        protected Integer doInBackground(String... urls) 
        {
            fetchAd();
            return 0; 
        }

        /** The system calls this to perform work in the UI thread and delivers
         * the result from doInBackground() */
        @Override
        protected void onPostExecute(Integer result) 
        {
            displayAd();
        }
    };
    task.execute("");
}

效果很好,但行为不是我想要的:在这种情况下,活动被推送到屏幕上(带有从右到左的动画),然后 AsyncTask 开始。所以图像在延迟后显示在屏幕上(这是正常的)。

但是我想在activity被推送之前执行请求,这样屏幕就直接和它的图像一起显示,没有任何延迟。

有没有办法让这种行为? 提前致谢。

【问题讨论】:

    标签: android android-activity android-asynctask


    【解决方案1】:

    您可以下载上一个活动中的图像,创建一个位图,然后将其作为额外内容传递到启动此活动的意图中。

    【讨论】:

    • 太棒了!我在父级中获取图像,并在我的新活动包中设置位图,如下所示 bundle.putParcelable("data", ad); ;然后我就用Bitmap ad = (Bitmap)getIntent().getParcelableExtra("data"); 检索它
    【解决方案2】:

    使用 AsyncTask 加载前一个 Activity 中的图像,并显示当前 Activity 中的图像。

    【讨论】:

      【解决方案3】:

      您可以在启动新活动的“父”活动中提取内容,将其存储在内存中或某种快速访问持久性中,然后启动活动。

      同样的原则可以是引入一个“加载器”活动,它会显示一个加载器,并预取数据,当收到所有数据时,它会启动应该显示数据的活动。

      【讨论】:

      • 好的,例如在静态变量中?
      • 我认为这可以正常工作,但是当活动完成是生命周期时,我一定不要忘记将包含图像的静态变量传递给 null。所以我更喜欢使用 bundle.putParcelable 的方式。
      猜你喜欢
      • 1970-01-01
      • 2013-05-25
      • 1970-01-01
      • 1970-01-01
      • 2011-07-09
      • 1970-01-01
      • 1970-01-01
      • 2017-03-21
      • 1970-01-01
      相关资源
      最近更新 更多