关于android Activity 中子线程操作界面的
2011-08-09 11:33
399 查看
最近做android游戏,在一个activity中开了多个子线程,有的时候会用到在子线程中处理界面信息,但是如果直接就在子线程中处理界面信息的话就会出现强制关闭的错误,经过各种查找资料,找到了解决的办法,那就是在子线程中开启一个Handler,通过Handler发送消息来处理界面的信息,你还可以把界面处理函数写到Handler的post方法里面,这样也是没有问题的,发个小例子:
new Thread(new Runnable() {
/**
*
* 主要功能:各矿源的计时线程,矿源点动画调用,矿源消耗完后,图表重画,取消动画
*
*/
public void run() {
while (mapmessage.lm[num].getLeftTime() > 0) {
try {
Thread.sleep(1000);
mapmessage.lm[num]
.setLeftTime(mapmessage.lm[num]
.getLeftTime() - 1);
myBar[num].setProgress(mapmessage.lm[num]
.getLeftTime());
mHandler.post(new Runnable() {
public void run() {
setFlagAnim(num);
}
});
} catch (InterruptedException e) {
e.printStackTrace();
}
}
if (mapmessage.lm[num].getLeftTime() <= 0) {
canvas.drawBitmap(no_mineral,
mapmessage.lm[num].getX() - 10,
mapmessage.lm[num].getY() - 10, null);
mHandler.post(new Runnable() {
public void run() {
flag[num].setVisibility(View.GONE); //设置图片不显示
Map.postInvalidate(); //界面刷新
}
});
}
}
}).start();
其中setFlagAnim(num);
public void setFlagAnim(int i) {
flag[i].setVisibility(View.VISIBLE);
myAnimation_Scale[i] = new ScaleAnimation(0.0f, 0.4f, 0.0f, 0.4f,
Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
0.5f);
myAnimation_Scale[i].setDuration(1000);
flag[i].setAnimation(myAnimation_Scale[i]);
flag[i].startAnimation(myAnimation_Scale[i]);
}
是设置页面图片动画的
new Thread(new Runnable() {
/**
*
* 主要功能:各矿源的计时线程,矿源点动画调用,矿源消耗完后,图表重画,取消动画
*
*/
public void run() {
while (mapmessage.lm[num].getLeftTime() > 0) {
try {
Thread.sleep(1000);
mapmessage.lm[num]
.setLeftTime(mapmessage.lm[num]
.getLeftTime() - 1);
myBar[num].setProgress(mapmessage.lm[num]
.getLeftTime());
mHandler.post(new Runnable() {
public void run() {
setFlagAnim(num);
}
});
} catch (InterruptedException e) {
e.printStackTrace();
}
}
if (mapmessage.lm[num].getLeftTime() <= 0) {
canvas.drawBitmap(no_mineral,
mapmessage.lm[num].getX() - 10,
mapmessage.lm[num].getY() - 10, null);
mHandler.post(new Runnable() {
public void run() {
flag[num].setVisibility(View.GONE); //设置图片不显示
Map.postInvalidate(); //界面刷新
}
});
}
}
}).start();
其中setFlagAnim(num);
public void setFlagAnim(int i) {
flag[i].setVisibility(View.VISIBLE);
myAnimation_Scale[i] = new ScaleAnimation(0.0f, 0.4f, 0.0f, 0.4f,
Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
0.5f);
myAnimation_Scale[i].setDuration(1000);
flag[i].setAnimation(myAnimation_Scale[i]);
flag[i].startAnimation(myAnimation_Scale[i]);
}
是设置页面图片动画的
相关文章推荐
- Android中Service与Activity的有关于进程与线程的问题
- 关于android Activity界面Finish之后代码是否继续执行
- 为什么说android UI操作不是线程安全的 分类: Android 2014-09-23 21:08 1357人阅读 评论(0) 收藏 举报 目录(?)[+] 可能在非UI线程中刷新界面的时候,U
- Android关于界面一定时间无操作自动跳转到指定界面的实现
- Android Activity的setTitle,AlertDialog,Toast操作是否都必须在非主UI线程中操作呢?
- Android中Service与Activity的有关于进程与线程的问题
- android中如何实现进入一个界面不做任何动作过10秒钟(有操作从新计时)自动跳转到待机activity,点击待机界面回到原来的界面
- Android的Activity启动长时间的操作开启一个Service比开启一个线程好
- Android 的Application之一 ---- 在不同的类(Activity界面)中进行数据的操作
- 非常详细的测试unity与android之间的通讯操作(一直activity那块还是有问题,一直进不来android界面!)
- Android中关于如何从一个Activity跳转到拨号界面,或者直接到通话中
- Android关于界面一定时间无操作自动跳转到指定界面的实现
- Android第四十二期 - 关于微信手势退出Activity的操作
- <iOS>关于子线程和block中操作主线程界面的控件讨论
- android中子线程操作UI的问题
- 关于cmd使用javah生成.h时出现:无法访问android.app.Activity 找不到android.app.activity的类文件
- android-Activity操作Data文件
- android 中 Notification 关于状态栏的一些操作
- android中的线程操作
- Android开发关于Activity跳转另一个Activity指定的fragment的解决方法