I';我正在尝试在Android Studio中使用AlarmManager创建每日倒计时

I';我正在尝试在Android Studio中使用AlarmManager创建每日倒计时,android,alarmmanager,countdown,Android,Alarmmanager,Countdown,我正在尝试使一个设定的数字每天都会减少,即使应用程序已关闭且未处于活动状态。例如,如果你在5天内没有打开该应用程序,那么当你打开它时,该数字将减少5个数字。我一直在尝试使用AlarmManager,但我只能让它做一个祝酒词,而不能在主活动中运行函数。这是我的密码 主要活动 private TextView mTest; private Button mButton; private int number = 100; @Override protected void onCreate(Bun

我正在尝试使一个设定的数字每天都会减少,即使应用程序已关闭且未处于活动状态。例如,如果你在5天内没有打开该应用程序,那么当你打开它时,该数字将减少5个数字。我一直在尝试使用AlarmManager,但我只能让它做一个祝酒词,而不能在主活动中运行函数。这是我的密码

主要活动

private TextView mTest;
private Button mButton;

private int number = 100;

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

    mButton = (Button) findViewById(R.id.button);
    mButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            scheduleAlarm();
        }
    });
}

public void scheduleAlarm(){
    Intent intentAlarm = new Intent(this, AlarmReceiver.class);
    AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, 100000, 100000, PendingIntent.getBroadcast(this, 1, intentAlarm, PendingIntent.FLAG_UPDATE_CURRENT ));
    Toast.makeText(MainActivity.this, "This is starting!", Toast.LENGTH_SHORT).show();
}

public void subtract(){
    mTest = (TextView) findViewById(R.id.textView);
    number -= 1;
    String numberString = Integer.toString(number);
    mTest.setText(numberString);
}
这是广播

private MainActivity mMainActivity = new MainActivity();

@Override
public void onReceive(Context context, Intent intent) {

   mMainActivity.subtract();
   Toast.makeText(context, "This is bogus", Toast.LENGTH_LONG).show();

}

您可以使用计时器()轻松完成此操作

请遵循以下示例:

long MINUTE_TO_MSEC = 60000;
long DAY_TO_MSEC = MINUTE_TO_MSEC * 60 * 24;
Timer timer = new Timer();
TimerTask countdownTask = new TimerTask() {
    public void run() {
        /* your function goes here */
    }
}
timer.scheduleAtFixedRate(task,0,DAY_TO_MSEC);

这将每24小时运行一次您的代码。

显示您当前的代码,并尝试修复响应的问题,但我不使用计时器的原因是,我希望即使应用程序关闭或未激活,也会发生“倒计时”。我编辑了我的问题,希望能让它更清楚。创建一个SharedReferences变量,并在onReceive方法或AlarmReceiver中减少该变量。然后显示SharedReferences变量的值。通过设置
private int number=100这将在每次实例化类时初始化变量。使用SharedReferences非常适合倒计时,即使在应用程序关闭时也是如此!谢谢然而,我最不需要的是屏幕更新。我做了一个刷新按钮,它可以工作,但我想知道是否有任何方法可以让它在每次广播发生时自动更新。SharedReferences保存到磁盘,对吗?似乎有可能最终耗尽闪存。。。