开机界面有个logo,运行完,就释放它,我想在它运行logo界面的时候,
    加载我主界面的数据,该怎么弄?
    如果开线程的话,貌似线程不能操作UI的吗?
    我现在想到的最好的就是,开个线程,然后用个handler,在消息里面把所有的空间的实例初始化:
   Button a = (Button)MainActivity.findViewById(R.id.aButtonID);
   Button b = (Button)MainActivity.findViewById(R.id.bButtonID);
   Button c = (Button)MainActivity.findViewById(R.id.cButtonID);
   Button d = (Button)MainActivity.findViewById(R.id.dButtonID);
  .........
     上面的这个是可以实现的。。
  
     但是我觉得还可以更加优化,就是把MainActivity的所有东西都弄好,结束logo播放之后,就直接显示它出来,就相当于,同时运行
两个Activity,一个logo,一个主界面。只不过,在logo显示的时候,主界面被隐藏起来而已,运行完之后,logo显示就被释放。。
      所以想问下大家,你们在logo加载界面的时候,加载其它的
数据的时候,你们是怎么做的? 

解决方案 »

  1.   

    可以直接把log页面和主界面换在一起吧,一个activity。log搞完了在重新setContentView().
     
     另外,如果加载数据没有关系的话,可以开线程去加载。
      

  2.   

    但是logo界面,用完之后,就没有用了,你这样的话,能释放得了它吗??我思考了一下,把代码改成了下面这样,但是我觉得还不够好,因为是新手,
    所以你能不能给点建议?
    LogoActivity: 
    public class LogoActivity extends Activity {
    private ImageView logo = null; 
    private Animation animation = null;
    private HashMap<String, Button> buttons = new HashMap<String, Button>();
    private InitButton initButton = new InitButton();//建个序列化
    private Handler handler = new Handler(){ 
    public void handleMessage(Message msg){
                   //添加按钮
                   buttons.put("b1", (Button)LogoActivity.this.findViewById(R.id.b1));
                   buttons.put("b2", (Button)LogoActivity.this.findViewById(R.id.b2));
                   buttons.put("b3", (Button)LogoActivity.this.findViewById(R.id.b3));
                   buttons.put("b4", (Button)LogoActivity.this.findViewById(R.id.b4));               initButton.setInitButton(buttons);//设置控件初始化

    };
    protected void onCreate(Bundle savedInstanceState) {
    //新起线程,初始化控件数据
                   new Thread(){
                   public void run(){ 
                   handler.sendEmptyMessage(0);
                   }
                   }.start();               super.onCreate(savedInstanceState);
                   setContentView(R.layout.activity_logo);
                   //启动logo画面
                   logo = (ImageView)this.findViewById(R.id.logoID);
                   animation = AnimationUtils.loadAnimation(this, R.anim.logo_animation); 
                   logo.startAnimation(animation);                animation.setAnimationListener(new AnimationListener() {
    public void onAnimationEnd(Animation animation) {
                   Bundle bundle = new Bundle();
                   bundle.putSerializable("test", initButton);//传递对象,参数序列化
                   Intent intent = new Intent(LogoActivity.this, MainActivity.class);
                   intent.putExtras(bundle); 
                   LogoActivity.this.startActivity(intent);
                   LogoActivity.this.finish();
                   }
                   });
    }
    /*实现接口*/




    }
    InitButton :
     
    public class InitButton implements Serializable{
    HashMap<String, Button> initButton = new HashMap<String, Button>();
    public HashMap<String, Button> getInitButton() {
                   return initButton;
    }
    public void setInitButton(HashMap<String, Button> initButton) {
                   this.initButton = initButton;
    }
    public InitButton(){}
    }
    MainActivity :
     
    public class MainActivity extends Activity{
    private HashMap<String, Button> buttons = new HashMap<String, Button>();
    public void onCreate(Bundle savedInstanceState){
                super.onCreate(savedInstanceState);
                this.setContentView(R.layout.activity_main);
                
                Bundle bundle = this.getIntent().getExtras();
                InitButton initButton = new InitButton();
                initButton = (InitButton)bundle.getSerializable("test");//获得序列化对象            buttons = initButton.getInitButton();//控件集合
                System.out.print(initButton);
                Button b1 = buttons.get("b1");
                Button b2 = buttons.get("b2");
                Button b3 = buttons.get("b3");
                Button b4 = buttons.get("b4");&nbsp;&nbsp;
    }
    }    因为考虑到findViewById()函数要耗的时间比较长,所以我在logo进入的时候,开启线程,进行把各个按钮控件都先找出来,然后先保存到集合里面,然后等logo动画完结的时候,再直接一个一个地赋值,我觉得效率比较高一点
       现在我想有没有办法,不用等logo动画完结,我就直接赋值完??
    就相当于除了logo界面,其余的界面都在后台已经全部实现,就剩下显示那部分,相当于其他的activity隐藏一样,有没有这样的办法?
    我想尽最大优化它
      

  3.   


    经过这两天的思考,我尽了自己最大的努力去修改,以下是我修改之后的成果,但是
    我觉得还不够好:
    LogoActivity: 
    public class LogoActivity extends Activity {
    private ImageView logo = null; 
    private Animation animation = null;
    private HashMap<String, Button> buttons = new HashMap<String, Button>();
    private InitButton initButton = new InitButton();//建个序列化
    private Handler handler = new Handler(){ 
    public void handleMessage(Message msg){
                   //添加按钮
                   buttons.put("b1", (Button)LogoActivity.this.findViewById(R.id.b1));
                   buttons.put("b2", (Button)LogoActivity.this.findViewById(R.id.b2));
                   buttons.put("b3", (Button)LogoActivity.this.findViewById(R.id.b3));
                   buttons.put("b4", (Button)LogoActivity.this.findViewById(R.id.b4));               initButton.setInitButton(buttons);//设置控件初始化

    };
    protected void onCreate(Bundle savedInstanceState) {
    //新起线程,初始化控件数据
                   new Thread(){
                   public void run(){ 
                   handler.sendEmptyMessage(0);
                   }
                   }.start();               super.onCreate(savedInstanceState);
                   setContentView(R.layout.activity_logo);
                   //启动logo画面
                   logo = (ImageView)this.findViewById(R.id.logoID);
                   animation = AnimationUtils.loadAnimation(this, R.anim.logo_animation); 
                   logo.startAnimation(animation);                animation.setAnimationListener(new AnimationListener() {
    public void onAnimationEnd(Animation animation) {
                   Bundle bundle = new Bundle();
                   bundle.putSerializable("test", initButton);//传递对象,参数序列化
                   Intent intent = new Intent(LogoActivity.this, MainActivity.class);
                   intent.putExtras(bundle); 
                   LogoActivity.this.startActivity(intent);
                   LogoActivity.this.finish();
                   }
                   });
    }
    /*实现接口*/




    }
    InitButton :
     
    public class InitButton implements Serializable{
    HashMap<String, Button> initButton = new HashMap<String, Button>();
    public HashMap<String, Button> getInitButton() {
                   return initButton;
    }
    public void setInitButton(HashMap<String, Button> initButton) {
                   this.initButton = initButton;
    }
    public InitButton(){}
    }
    MainActivity :
     
    public class MainActivity extends Activity{
    private HashMap<String, Button> buttons = new HashMap<String, Button>();
    public void onCreate(Bundle savedInstanceState){
                super.onCreate(savedInstanceState);
                this.setContentView(R.layout.activity_main);
                
                Bundle bundle = this.getIntent().getExtras();
                InitButton initButton = new InitButton();
                initButton = (InitButton)bundle.getSerializable("test");//获得序列化对象            buttons = initButton.getInitButton();//控件集合
                System.out.print(initButton);
                Button b1 = buttons.get("b1");
                Button b2 = buttons.get("b2");
                Button b3 = buttons.get("b3");
                Button b4 = buttons.get("b4");&nbsp;&nbsp;
    }
    }    因为考虑到findViewById()函数要耗的时间比较长,所以我在logo进入的时候,开启线程,进行把各个按钮控件都先找出来,然后先保存到集合里面,然后等logo动画完结的时候,再直接一个一个地赋值,我觉得效率比较高一点
       现在我想有没有办法,不用等logo动画完结,我就直接赋值完??
    就相当于除了logo界面,其余的界面都在后台已经全部实现,就剩下显示那部分,相当于其他的activity隐藏一样,有没有这样的办法?
    我想尽最大优化它