java - 如何在 Android Studio 完成之前停止正在运行的方法

标签 java android

你好,我是 android 新手,我在开发应用程序时遇到了问题。

我有一个带有计时器和关闭按钮的模式。当计时器结束时,模态将关闭,或者在计时器结束之前使用关闭按钮关闭模态。这里的图片: enter image description here

但是当我按下关闭按钮手动关闭模态时,运行计时器的方法仍在运行并尝试关闭模态,尽管模态已经关闭,这是导致我的应用程序崩溃的问题。错误是

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference

我如何在按下关闭按钮时停止该方法?

这是我的定时器方法,在定时器结束时关闭模态:

public void startTimer(){
        int hoursToGo = 0;
        int minutesToGo = 0;
        int secondsToGo = 10;

    int millisToGo = secondsToGo*1000+minutesToGo*1000*60+hoursToGo*1000*60*60;

    new CountDownTimer(millisToGo,1000) {

        @Override
        public void onTick(long millis) {
            int seconds = (int) (millis / 1000) % 60 ;
            int minutes = (int) ((millis / (1000*60)) % 60);
            String text = String.format("%02d:%02d",minutes,seconds);
            tv.setText(text);
        }

        @Override
        public void onFinish() {
            tv.setText("Request Timeout");
        }
    }.start();

    final AlertDialog d = (AlertDialog) getDialog();
    final Timer timer2 = new Timer();
    timer2.schedule(new TimerTask() {
        public void run() {
            d.dismiss();
            timer2.cancel(); //this will cancel the timer of the system

            Intent i =  new Intent(getActivity(), PromoActivity.class);
            i.setFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP );
            getActivity().startActivityForResult(i,0);
        }
    }, 10000);
}

我在这里执行方法:

public void onResume(){
    super.onResume();

    startTimer();
}

最佳答案

当你按下关闭按钮时你必须调用timer2.cancel();

关于java - 如何在 Android Studio 完成之前停止正在运行的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45916313/

相关文章:

android - 为一个简单的应用程序处理 Android 中的运行时更改——我需要使用 Bundle 吗?

java - Eclipse 中的跟踪点

java - 带有可视化图表的 JPA 数据库建模器

java - 如何在适配器类的菜单中找到图标的ViewById

Android WebView : Should shouldInterceptRequest be triggered by XmlHttpRequest

java - 在 ListView 的特定位置显示图像

java - 如何在 smack 中设置我的名字?

java - protobuff-net 可以与 protoc 2.4.1 一起使用吗

Java AES加密/解密始终返回相同的内容

java - 从 Android 模拟器连接到 localhost