Всего лишь несколько вопросов, которые нужно указать в правильном направлении, и покажите мою работу.
Моя цель:
- Пользователь вводит значение (минуты) в EditText в окне Activity и нажимает кнопку OK.
- Активность закрывается, а затем по истечении заданного промежутка времени появляется новое диалоговое окно «Активность».
Мой вопрос (ы):
- Должен ли я использовать Сервис (или) IntentService?
В Службе, выполняющей таймер, должен ли я использовать поток для запуска кода внутри него?
Кроме того, если да, следует ли мне запускать таймер внутри одного потока, а затем запускать новый код в другом потоке?
Для кода таймера в Сервисе я должен просто использовать AlarmManager (ИЛИ) a CountdownTimer (ИЛИ) , если я использую какой-то PendingIntent (ИЛИ) какой-то ASyncTask (ИЛИ) , использующий системные часы для определения истекшего фактического времени? Я не уверен, что лучший способ сделать это, есть так много способов.
Моя работа до сих пор:
В коде кнопки я преобразую значение, введенное в editText, в целое число, представляющее время, введенное в минутах, а затем обратно в строку, чтобы его можно было передать в службу с помощью 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();
}
Меня не слишком беспокоит показанная мной работа - меня больше волнует, как мне следует настроить таймер, поскольку, как я понял, есть несколько способов сделать это.