我的目标是让线程运行播放声音,然后选择随机动画和随机图像并显示它们。
它目前正在运作,但我想知道是否有更好的方法。我有一个黑客对线程的理解(因为,我只知道这有效),所以我很感激一些反馈。此外,我的应用程序中存在内存溢出问题,是否有更好的方法来管理此活动内存?非常感谢!
public int[] images = {R.drawable.splat0,R.drawable.splat1,R.drawable.splat2,R.drawable.splat3,
R.drawable.splat4,R.drawable.splat5,R.drawable.splat6,R.drawable.splat7,R.drawable.splat8,
R.drawable.splat9};
public int[] anims= {R.anim.splat0,R.anim.splat1,R.anim.splat2,
R.anim.splat3,R.anim.splat4,R.anim.splat5,R.anim.splat6};
MediaManager mp;
Handler tick_Handler = new Handler();
MyThread tick_thread = new MyThread();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
MainActivity.this.setContentView(R.layout.activity_main);
mp = new MediaManager();
image = (ImageView)this.findViewById(R.id.mainActivitySplat);
tick_Handler.post(tick_thread);
}
@Override
public void onStop(){
tick_Handler.removeCallbacks(tick_thread);
super.onStop();
}
@Override
public void onResume(){
tick_Handler.post(tick_thread);
super.onResume();
}
private class MyThread implements Runnable {
@Override
public void run() {
mp.playSoundClip(MainActivity.this,R.raw.swoosh);
image.setBackgroundResource(images[(int)(Math.random()*splats.length)]);
Animation myAnim=AnimationUtils.loadAnimation(MainActivity.this,splatAnim[(int)(Math.random()*splatAnim.length)]);
splat.startAnimation(myAnim);
tick_Handler.postDelayed(tick_thread, 3500);
}
}
编辑: 我发现这是使用Thread的一种不好的方式。 MyThread持有对Activity的隐式引用,并导致大量内存泄漏。通过将类更改为私有静态MyThread我解决了泄漏,但我还没有想出如何以这种方式获得所需的行为。稍后会更新。
答案 0 :(得分:0)
使用像
boolean isActibityKilled=true //when in onstop
在runnable中使用它来检查活动是否正在运行,如果活动没有运行,或者它被停止然后杀死你的线程