Andriod耗时操作的处理(音乐播放器欢迎界面)

来源:互联网 发布:电能质量管理 大数据 编辑:程序博客网 时间:2024/06/05 04:04

 

      在做Android开发的时候,有时候需要在一个Activity的里面调用两次 setContentView方法。比如在应用启动的时候,开始显示欢迎界面,在显示欢迎界面的同时,进行后台数据的处理,等到后台数据准备好了,才显示 真正的应用界面。这样的做法不会让使用者有突兀的感觉。反之,应用已启动就显示真正的应用界面,但在后续的操作需要准备数据的时候,假定是5秒钟,那么在 这5秒钟内使用者将无法使用该应用,这样用户界面显然是不够友好的。

 

为了实现欢迎界面,大家很自然地就会想到:在onCreate方法中,调用两次 setContentView。是的,要调用两次setContentView,但怎么调用还是有点技巧,而不是简单地调用两次 setContentView就可以解决问题的。下面,我们就用实际的例子来给予说明。

 

 

 

import android.app.Activity;import android.os.Bundle; public class WelcomeActivity extends Activity{       @Override       public void onCreate(Bundle savedInstanceState)       {            super.onCreate(savedInstanceState);            //setContentView(R.layout.main);    // 把这一句改为下面一句,用以显示欢迎界面            setContentView(R.layout.welcome);                   // 下面是模拟数据处理需要5秒钟的时间            try            {                    Thread.sleep(5000);            }            catch (InterruptedException e)            {                    e.printStackTrace();            }            setContentView(R.layout.main);                  // 显示真正的应用界面       }}你将会发现,欢迎界面根本没有出现。在本该出现欢迎界面的时候,界面上什么也没有,过了五秒钟程序会直接显示主页面,将setContentView(R.layout.welcome);和下面的setContentView(R.layout.main); 交换位置后程序运行时开始的五秒钟界面什么也不现实,五秒钟后会出现欢迎界面.因为setContentView方法所指定的View,只有在onCreate方法返回后才会显示在界面上。因此,如果调用了两次setContentView方法,只有最后一次才是有效的。
 

 

import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message; public class WelcomeActivity extends Activity{         private Handler handler;                  // 声明handler       @Override       public void onCreate(Bundle savedInstanceState)       {                    super.onCreate(savedInstanceState);                    //setContentView(R.layout.main);                                // 把这一句改为下面一句                    setContentView(R.layout.welcome);                                // 初始化handler                    handler = new Handler()                    {                             @Override                             public void handleMessage(Message msg)                             {                                      if(msg.what == 1)                                         // handler接收到相关的消息后                                      {                                                setContentView(R.layout.main);    // 显示真正的应用界面                                      }                             }                    };                               // 新建一个线程,过5秒钟后向handler发送一个消息                    Runnable runnable = newRunnable()                    {                             public void run()                             {                                      try                                      {                                                Thread.sleep(5000);//用静止五秒张模拟耗时操作                                      }                                        catch (InterruptedException e)                                      {                                                e.printStackTrace();                                      }                                      handler.sendEmptyMessage(1);                             }                    };                    Thread thread = new Thread(runnable);                    thread.start();        //                  // 下面是模拟数据处理需要5秒钟的时间//                  try//                  {//                          Thread.sleep(5000);//                  } //                 catch (InterruptedException e)//                  {//                          e.printStackTrace();//                  }//        //                 setContentView(R.layout.main);                    }}

 出自:http://blog.csdn.net/pathuang68/article/details/6713498

 

0 0
原创粉丝点击