Android:在单独的方法中创建onPause时关闭弹出窗口

时间:2016-04-08 02:29:45

标签: java android popupwindow timertask

我的代码中有一个单独的方法,可以创建一个弹出窗口:

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中解除弹出窗口?

2 个答案:

答案 0 :(得分:0)

呼叫 -

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();
  }

}

答案 1 :(得分:0)

泄露窗口的原因是它与活动关闭时没有同步,而是在活动关闭时未关闭。访问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);
}

在创建弹出窗口之前按照相同的步骤进行操作。