0

简介:我做了一个基础活动来扩展我的其他活动。我已经用函数体中的可运行对象覆盖了几个方法,例如:

@Override
    protected void onStop(){
        new Handler().postDelayed(new Runnable()
        {
            @Override
            public void run()
            {
                BaseActivity.super.onStop();
            }
        }, Fade.fadeDuration);
    }

但是,当我尝试运行该应用程序时,我得到了 SuperNotCalledException。如果我将 super.onStop() 从可运行对象中取出,我不会有任何异常。

问题:如何从基础活动中的可运行对象调用 super.onStop 而不会导致 SuperNotCalledException?

附加信息:我正在尝试添加仅淡出某些视图的淡出动画。这大约需要 700 毫秒,所以我也需要将 onStop 延迟 700 毫秒。问题是在每个活动中编写代码都很麻烦。我想做一个基础活动,这样我就不必担心每一项活动都会褪色。

4

1 回答 1

0

如果您试图简单地延迟执行,super.onStop我会使用CountDownLatch.

也许是这样的:

private void CountDownLatch latch;
private void long latchWait = 10L; // seconds 
private void TimeUnit latchWaitUnit = SECONDS;

@Override
protected void onStop(){
   try{
       this.latch.await(this.latchWait, this.latchWaitUnit);
   catch(InterruptedException e){
       // Handle
   }finally{
       super.onStop();
   }
}

public void startLatch(long wait){
    this.latch = new CountDownLatch(1);
    this.latchWait = wait;
}

public void releaseLatch(){
   this.latch.countDown()
}

我没有测试这段代码。

于 2013-04-20T11:43:56.923 回答