在服务中运行后台计时器并在之后触发代码的最佳实践?

时间:2019-01-14 16:26:20

标签: android android-intent android-service alarmmanager android-pendingintent

仅需指出几个正确的方向,并展示到目前为止的工作。

我的目标:

  • 用户在“活动”窗口的EditText中输入一个值(分钟),然后按OK键。
  • 活动关闭,然后经过设置的时间后,将显示一个新的“活动”对话框。

我的问题:

  • 我应该使用服务(或)是IntentService吗?
  • 在运行计时器的服务中,是否应该使用线程在其中运行代码? 另外,如果是这样,我应该在一个线程中运行Timer,然后在另一个线程中触发新代码吗?

  • 对于服务中的计时器代码,我应该只使用AlarmManager (OR)还是CountdownTimer (OR),如果我使用某种PendingIntent (OR)某种ASyncTask (OR)使用系统时钟来确定实际经过的时间?我不确定执行此操作的最佳方法,方法很多。

到目前为止我的工作

  • 在Button代码中,我将输入到editText中的值转换为表示以分钟为单位输入的时间的int值,然后返回到String,以便可以使用带有Intent的putExtra将其传递给服务。

    //识别EditText     EditText editText_timerValue;     editText_timerValue =(EditText)findViewById(R.id.editText_timerValue);

    // MAKE SURE A VALUE HAS BEEN ENTERED, AND AVOID NullPointerException
    if (editText_timerValue != null) {
    
        // CONVERT USER-DATA FROM THE EditText TO AN INT
        int int_timerValue_Ms;
        int_timerValue_Ms = Integer.parseInt(editText_timerValue.getText().toString());
        // CONVERT USER-DATA FROM (Integer = MilliSeconds) TO (Minutes)
        int int_timerValue_Min;
        int_timerValue_Min = int_timerValue_Ms * 60000;
    
        // CONVERT INT BACK TO A STRING SO IT CAN BE PASSED USING putExtra
        String string_timerValue_Min;
        string_timerValue_Min = String.valueOf(int_timerValue_Min);
    
        // DECLARE INTENT FOR STARTING THE TIMER SERVICE
        Intent intent = new Intent(this, TimerService.class);
    
        // PASS THE VALUE OF THE EditText WITH THE INTENT THAT STARTS SERVICE
        intent.putExtra("TIMER_VALUE", string_timerValue_Min);
    
        // START TIMER SERVICE (RUNS BACKGROUND TIMER, PERFORMS ACTIONS WHEN EXPIRED)
        startService(intent);
    
        // CLOSE THE CURRENT ACTIVITY, AS THE TIMER SERVICE RUNS IN THE BACKGROUND
        finish();
    
        // IF NO VALUE HAS BEEN ENTERED INTO THE EditText
        } else {
    
        Toast.makeText(MainActivity.this, "Please enter a Value in Minutes!", Toast.LENGTH_LONG).show();
    }
    

我不太担心我的作品展示-我更关心应该如何设置计时器,因为从我那里收集到的信息有多种实现方法。

0 个答案:

没有答案