Лабораторная работа 1 По предмету «Разработка мобильных приложений» «Разработка sms manager а на android studio»


Download 360.78 Kb.
bet3/3
Sana13.05.2023
Hajmi360.78 Kb.
#1456818
TuriЛабораторная работа
1   2   3
Bog'liq
лаб 1

someTask – здесь будем кодить работу для сервиса
Сервис, как и новые, создаваемые Activity необходимо прописать в манифесте. Делается это полностью аналогично. Жмете Add, выбираете Service. И в поле Name выбираете MyService.

MainActivity.java:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

package ru.startandroid.develop.p0921servicesimple;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends Activity {
final String LOG_TAG = "myLogs";
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void onClickStart(View v) {
startService(new Intent(this, MyService.class));
}
public void onClickStop(View v) {
stopService(new Intent(this, MyService.class));
}
}

Здесь у нас два метода, которые срабатывают при нажатии на кнопки Start service и Stop service. В них мы соответственно запускаем или останавливаем сервис методами startService и stopService. На вход передаем Intent, указывающий на сервис. Это очень похоже на то, как мы вызываем Activity методом startActivity.


Давайте все сохраним и запустим приложение.

Нажмем Start service и смотрим лог:
onCreate
onStartCommand

Выполнился метод onCreate сервис создался, и onStartCommand – сервис выполняет содержимое метода onStartCommand.
Если мы теперь еще раз нажмем Start service:
onStartCommand
Сервис уже создан, onCreate не вызывается, выполняется только метод onStartCommand.
Жмем Stop service
onDestroy
Сервис уничтожился.
Убедимся, что сервис не зависит от приложения. Жмем Start service.
onCreate
onStartCommand

Сервис запущен. Закрываем приложение кнопкой Назад. В логах тишина, onDestroy в сервисе не выполнился, сервис продолжает жить. Ему все равно, работает приложение, его запустившее или не работает.
Долгим удержанием клавиши Домой выведем список последних приложений

снова откроем наше приложение и нажмем Stop service. В логах:
onDestroy
Сервис уничтожен.
Теперь попробуем выполнять что-нибудь осмысленное в onStartCommand. Перепишем метод someTask в MyService.java:

1
2
3
4
5
6
7
8
9
10

void someTask() {
for (int i = 1; i<=5; i++) {
Log.d(LOG_TAG, "i = " + i);
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

Будем с интервалом в 1 секунду выводить в лог записи из сервиса.
Все сохраним, запустим и нажмем Start service:
ProgressBar замер, экран стал недоступен. А логи идут:
onCreate
onStartCommand
i = 1
i = 2
i = 3
i = 4
i = 5

Вывод – сервис работает в основном потоке и блокирует экран.
Вынесем цикл с паузами в отдельный поток. И чтобы два раза не бегать, давайте заодно узнаем, что делает метод stopSelf.
Перепишем метод someTask:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

void someTask() {
new Thread(new Runnable() {
public void run() {
for (int i = 1; i<=5; i++) {
Log.d(LOG_TAG, "i = " + i);
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
stopSelf();
}
}).start();
}

Мы вынесли код в отдельный поток и добавили вызов метода stopSelf – этот метод аналогичен методу stopService, он останавливает сервис, в котором был вызван.
Все сохраняем, запускаем и жмем Start service. ProgressBar крутится, экран не блокирован, логи идут:
onCreate
onStartCommand
i = 1
i = 2
i = 3
i = 4
i = 5
onDestroy

Сервис создался, выполнил работу и сам остановился методом stopSelf.
Download 360.78 Kb.

Do'stlaringiz bilan baham:
1   2   3




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling