我的代码中有一个单独的方法,该方法可以创建弹出窗口:
private void showPopup(final Activity context, int[] buttonLocation) {
// CREATE POPUP HERE NAMED popup
// Display popup for 600ms (it's a popup with an animation)
final Timer t1 = new Timer();
TimerTask titty1 = new TimerTask(){
public void run(){
Romp.this.runOnUiThread(new Runnable() {
@Override
public void run() {
popup.dismiss();
t1.cancel();
t1.purge();
}
});
}
};
t1.schedule(titty1, 600);
}
当我关闭代码中其他地方的活动,并试图返回到上一个活动时,我会收到一个"泄漏窗口"错误,推断我需要关闭弹出窗口。我忽略了上面显示的计时器中的弹出窗口,然而,我的代码中还有另一部分可以触发活动同时结束。
我希望能够在销毁/暂停:上做这样的事情
@Override
public void onDestroy() {
ACTIVITY.this.finish();
eraseData();
popup.dismiss();
super.onDestroy();
}
有没有一种方法可以从onDestroy/pause中消除弹出窗口,该窗口是用单独的方法创建的?
泄漏窗口的原因是它没有与链接的活动同步,并且在活动关闭时没有关闭。因此,在访问UI元素时,最好确保活动是活动的。
boolean alive=true;
@Override public void onDestroy() {
alive=false;
ACTIVITY.this.finish();
eraseData();
popup.dismiss();
super.onDestroy(); }
private void showPopup(final Activity context, int[] buttonLocation) {
// CREATE POPUP HERE NAMED popup
// Display popup for 600ms (it's a popup with an animation)
final Timer t1 = new Timer();
TimerTask titty1 = new TimerTask(){
public void run(){
Romp.this.runOnUiThread(new Runnable() {
@Override
public void run() {
if(!alive)
return;
popup.dismiss();
t1.cancel();
t1.purge();
}
});
}
};
t1.schedule(titty1, 600);
}
在创建弹出窗口之前遵循相同的步骤。
调用-
titty1.cancel(true);
t1.cacncel();
根据您的用例/需求,在您的onPause()
/onDestroy()
中。
更新
class Test{
private final Timer t1 = new Timer();
private TimerTask titty1=null;
private void showPopup(final Activity context, int[] buttonLocation) {
// CREATE POPUP HERE NAMED popup
// Display popup for 600ms (it's a popup with an animation)
titty1 = new TimerTask(){
public void run(){
Romp.this.runOnUiThread(new Runnable() {
@Override
public void run() {
if(!alive)
return;
popup.dismiss();
t1.cancel();
t1.purge();
}
});
}
};
t1.schedule(titty1, 600);
}
@Override
public void onDestroy() {
alive=false;
ACTIVITY.this.finish();
eraseData();
popup.dismiss();
titty1.cancel(true);
t1.cancel();
super.onDestroy();
}
}