Java 转到其他活动时计时器()函数不工作

Java 转到其他活动时计时器()函数不工作,java,android,android-activity,timer,Java,Android,Android Activity,Timer,在我的应用程序中,我想在5秒钟后使用Timer()函数关闭它。当我在MainActivity中时,它会工作,但当我转到另一个活动时,应用程序不会关闭。现在,如果我切换活动,如何在后台运行此Timer()函数。在这种情况下该怎么办 Timer timer = new Timer(); timer.schedule(new TimerTask() { public void run() { finish(); }

在我的应用程序中,我想在5秒钟后使用Timer()函数关闭它。当我在MainActivity中时,它会工作,但当我转到另一个活动时,应用程序不会关闭。现在,如果我切换活动,如何在后台运行此Timer()函数。在这种情况下该怎么办

    Timer timer = new Timer();
    timer.schedule(new TimerTask() {

        public void run() {

            finish();

        }

    }, 5000); // Application will be closed after 5 seconds

您可以使用广播接收器来实现这一点。在要完成的活动中,需要创建广播接收器

public class TestActivity extends Activity {

public static String intent_filter_finish = "com.test.finish";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);

           registerReceiver(finishReceiver,
                new IntentFilter(intent_filter_finish));

    }

    @Override
    protected void onDestroy() {
        unregisterReceiver(finishReceiver);
        super.onDestroy();
    }


    BroadcastReceiver finishReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {

            finish();

        }
    };

}
现在,在第二个活动中,您需要在5秒后发送广播,例如

public class SecondActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_second);

       new Handler().postDelayed(new Runnable() {

        @Override
        public void run() {
            sendBroadcast(new Intent(TestActivity.intent_filter_finish));

        }
    }, 5000);

    }

}
或者其他可能的方法是在测试活动中直接使用
postdayed()
方法,例如

new Handler().postDelayed(new Runnable() {

        @Override
        public void run() {
            finish();

        }
    }, 5000);

可能重复“是”,您是对的,但没有合适的答案如何做到这一点…当您切换到另一个活动时,该活动占用的内存将被释放,并且
计时器
对象也将丢失。这就是它不起作用的原因。您可以通过使用应用程序上下文来实现这一点。在应用程序中编写一个关闭自身的函数,并从活动调用它。您的
TimerTask
工作正常。它完成了不可见的主要活动。您需要将此代码添加到其他活动中(不要忘记取消其他
计时器!),或者使用
AlarmManager
,在指定时间向您的应用程序发送广播,并让每个活动注册一个
BroadcastReceiver
,关闭活动。如果我使用Timer()在另一个活动中,用户可能会在MainActivity中停留一段时间,当用户转到第二个活动时,计时器()会从开始处开始…#Bhavesh Rangani。。。代码在TestActivity中是无错误的,但在SecondActivity中它在行中给出错误。。。new Handler().postDelayed(new Runnable(){@Override public void run(){sendBroadcast(new Intent(TestActivity.Intent_filter_finish));},5000);}它说“处理者”是抽象的;无法安装新处理程序()下方出现红线当我将鼠标悬停在新处理程序()上时,它会显示消息“'Handler'是抽象的;无法安装”…请确保已导入'android.os.Handler;'。您需要放置super.ondestory();在测试活动的onDestroy(){};方法。。