问:Android Dev - 后台计时器在到期时完成操作?

时间:2016-08-01 16:59:12

标签: java android android-studio service broadcastreceiver

快速而重要:
我的Activity有一个Button,还有一个EditText来输入一个表示分钟的值。当按下时,我想关闭Activity窗口,然后在后台我要运行一个倒计时器,这个(经过一段时间后用户在EditText中输入的内容)当时间用完时执行操作。

例如:他们进入" 5"然后按OK ..活动消失,5分钟后,另一个活动弹出。

问题:
做这个的最好方式是什么?一些服务器的某种接收器?我需要运行一个处理程序,还是一个线程来执行此操作?或者可能是警报管理器?或者TimerTask听起来是正确的,但是我使用timertask读取对某些人来说是不好的理由?)..那么最佳做法是什么呢?

非常感谢任何指导!

PS ..这就是我之前为OK按钮的代码所做的事情。它已经工作了几次,但突然有一天停止了工作:

< / p>

public void popup_ok(View v) {

    Log.i(TAG, "[popup_ok Button-Click Receipt]");

    EditText et_timer = (EditText) findViewById(R.id.et_timer);

    assert et_timer != null;
    int i = Integer.parseInt(et_timer.getText().toString());

    Intent intent = new Intent(this, TimerReceiver.class);

    PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 234324243, intent, 0);


    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
    alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (i * 1000), pendingIntent);

    Toast.makeText(this, "Timer has been set!", Toast.LENGTH_LONG).show();


    // Close Activity Window after the Timer has been Set
    finish();



// End of "popup_ok" Button Code
}



再次,这是以前的工作,但后来突然间以某种方式破坏了......我不确定这是否是最初做到这一点的正确方法,但这是我最终的结果。有什么想法吗?

再次感谢您的任何进一步投入!我是一个社交学习者,而不是一个机器人;)

1 个答案:

答案 0 :(得分:0)

使用服务在后台运行,因为如果您的活动不在前台,计时器将无法运行。您可以将其与Alarm-Manager一起使用,以设置的间隔左右运行它。您服务中的一个简单实现可能是

void setAlarm(){
    AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
        Intent i = new Intent(this, getClass());

        i.putExtra(Artoo.TIMER, period);
        am.set(AlarmManager.RTC, timeNow + period,
                PendingIntent.getService(this, 0, i, PendingIntent.FLAG_UPDATE_CURRENT)
);
}