开机界面有个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加载界面的时候,加载其它的
数据的时候,你们是怎么做的?
加载我主界面的数据,该怎么弄?
如果开线程的话,貌似线程不能操作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加载界面的时候,加载其它的
数据的时候,你们是怎么做的?
解决方案 »
- Android 逐帧动画
- android Gallery图片显示,默认第一张图片位置是屏幕的中间,屏幕右边会显示下张图片?
- 关于Android中的时间监听问题
- android后台监控程序怎么写?
- 用imageview显示图片,手机一片黑的啊,根本没图片
- 谁做过音乐的边下边播的功能啊?
- 如何在myeclipse2013上开发安卓应用,环境怎么配置?
- android是怎么根据id查找到控件的
- android-async-http框架的例子怎么导入工具运行
- 问一下 这样一个控件要怎么自定义啊 求大神指点一二!!!
- 项目源码--Android天气日历精致UI源码
- SignalStrength这个类不可以继承
另外,如果加载数据没有关系的话,可以开线程去加载。
所以你能不能给点建议?
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隐藏一样,有没有这样的办法?
我想尽最大优化它
经过这两天的思考,我尽了自己最大的努力去修改,以下是我修改之后的成果,但是
我觉得还不够好:
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隐藏一样,有没有这样的办法?
我想尽最大优化它