快速而重要:
我的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
}
再次,这是以前的工作,但后来突然间以某种方式破坏了......我不确定这是否是最初做到这一点的正确方法,但这是我最终的结果。有什么想法吗?
再次感谢您的任何进一步投入!我是一个社交学习者,而不是一个机器人;)
答案 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)
);
}