Handler.postDelayed(...)不会延迟Runnable的执行

3
我已经自己实现了一个OnCompletionListener,它看起来像这样:

public class SongEndCompletionListener  implements OnCompletionListener{

    String nextView;
    Context actualActivity;
    int stopTime;

    public SongEndCompletionListener(Context activity, String nextView, int time) {
        this.nextView = nextView;
        actualActivity = activity;
    }
    @Override
    public void onCompletion(MediaPlayer arg0) {


            Handler handler = new Handler(); 
            handler.postDelayed(new Runnable() { 
                 public void run() { 
                        try {
                     Intent stopplay;
                     stopplay = new Intent(actualActivity,Class.forName(nextView));
                     actualActivity.startActivity(stopplay);    
                 } catch (ClassNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                    } 
                 } 
            }, stopTime); 


    }
}

我希望它能暂停stopTime秒,但实际上音频文件结束后它立即跳转到下一个视图。您可以指出我的错误或如何以不同的方式延迟切换到另一个活动吗?
每个提示都会受到赞赏!

切换活动并不是问题,这个功能很好用。它只是在“歌曲”播放完毕后切换活动,而不是在停止播放后的stopTime毫秒内停止。 - Flo
1个回答

8

我知道为什么你的Handler没有延迟发布。

这是因为你的stopTime为0。

你需要为“stopTime”设置一个值,否则它将为0。 例如,要延迟一秒钟运行Runnable:

stopTime = 1000; // milliseconds

或者使用你的构造函数:

public SongEndCompletionListener(Context activity, String nextView, int time) {
    this.nextView = nextView;
    actualActivity = activity;
    this.stopTime = time; // you forgot this
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接