我想在程序进入logo界面的时候加载主界面的数据

mimixi666 2013-07-27 05:34:24
开机界面有个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加载界面的时候,加载其它的
数据的时候,你们是怎么做的?
...全文
119 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
qinjuning 2013-07-29
  • 打赏
  • 举报
回复
可以直接把log页面和主界面换在一起吧,一个activity。log搞完了在重新setContentView(). 另外,如果加载数据没有关系的话,可以开线程去加载。
mimixi666 2013-07-29
  • 打赏
  • 举报
回复
经过这两天的思考,我尽了自己最大的努力去修改,以下是我修改之后的成果,但是 我觉得还不够好: 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");  
}
}
因为考虑到findViewById()函数要耗的时间比较长,所以我在logo进入的时候,开启线程,进行把各个按钮控件都先找出来,然后先保存到集合里面,然后等logo动画完结的时候,再直接一个一个地赋值,我觉得效率比较高一点。。。 现在我想有没有办法,不用等logo动画完结,我就直接赋值完?? 就相当于除了logo界面,其余的界面都在后台已经全部实现,就剩下显示那部分,相当于其他的activity隐藏一样,有没有这样的办法? 我想尽最大优化它。。。
mimixi666 2013-07-29
  • 打赏
  • 举报
回复
引用 1 楼 qinjuning 的回复:
可以直接把log页面和主界面换在一起吧,一个activity。log搞完了在重新setContentView(). 另外,如果加载数据没有关系的话,可以开线程去加载。
但是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");  
}
}
因为考虑到findViewById()函数要耗的时间比较长,所以我在logo进入的时候,开启线程,进行把各个按钮控件都先找出来,然后先保存到集合里面,然后等logo动画完结的时候,再直接一个一个地赋值,我觉得效率比较高一点。。。 现在我想有没有办法,不用等logo动画完结,我就直接赋值完?? 就相当于除了logo界面,其余的界面都在后台已经全部实现,就剩下显示那部分,相当于其他的activity隐藏一样,有没有这样的办法? 我想尽最大优化它。。。

80,472

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧