gpt4 book ai didi

android - 3 秒后取消对话框 - 多次使用后我的应用程序不断崩溃

转载 作者:行者123 更新时间:2023-11-29 16:26:11 24 4
gpt4 key购买 nike

我有一个扩展对话框类,我想显示 3 秒然后消失。这在前 2 次被调用时效果很好,但之后我的应用程序崩溃了。不可否认,我不是线程方面的最佳人选,我认为这可能是我的问题所在。正如您从下面的代码(注释掉的部分)中看到的那样,我尝试使用取消事件来终止生成的线程,但这会使它在第一次运行时崩溃。我还尝试在父类的 UI 线程上执行所有这些操作,结果与此相同(显示对话框 3 次后崩溃)。

import java.util.Timer;
import java.util.TimerTask;

import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Handler;


public class HandResults extends Dialog implements DialogInterface {

HandResults hr;
Timer myTimer;
Handler hand = new Handler();
Thread t;

public HandResults(Context context) {
super(context);
setContentView(R.layout.handresults);
hr = this;
/*
this.setOnCancelListener(new OnCancelListener(){
public void onCancel(DialogInterface dialog) {
t.destroy();

}
});
*/
}

public void showHands(){
this.show();
myTimer = null;
myTimer = new Timer();
myTimer.schedule(new TimerTask() {
@Override
public void run() {
TimerMethod();
}

}, 3000);
}

private void TimerMethod()
{
t = new Thread(){
public void run(){
hand.post(Timer_Tick);
}
};
t.start();
}

private Runnable Timer_Tick = new Runnable() {
public void run() {
hr.cancel();
}
};
}

最佳答案

  1. 当收到 onCancel 事件时,您将调用 t.destroy() 并且 destroy 是一个已弃用的方法。
  2. 如果您正在创建一个已经异步运行的计时器,则无需启动另一个线程。

所以这可能会更好:

public class HandResults extends Dialog implements DialogInterface {

HandResults hr;
Timer myTimer;
Handler hand = new Handler();

public HandResults(Context context) {
super(context);
setContentView(R.layout.handresults);
hr = this;
}

public void showHands(){
this.show();
myTimer = null;
myTimer = new Timer();
myTimer.schedule(new TimerTask() {
@Override
public void run() {
hr.cancel(); // call the cancel method directly
}

}, 3000);
}
}

不需要创建您自己的线程,因此上面的代码应该大致完成您正在尝试做的事情。

关于android - 3 秒后取消对话框 - 多次使用后我的应用程序不断崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3538470/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com