Форум программистов, компьютерный форум CyberForum.ru

Service автозапуск после закрытия родителя - Android

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
derec
0 / 0 / 0
Регистрация: 29.01.2014
Сообщений: 74
08.03.2014, 17:13     Service автозапуск после закрытия родителя #1
Такой вопрос назрел несущей.
Есть актвити и сервис.
и подружить бы мне б их хотелось.
но есть проблема везкая.
дружбу дружбою сдружил я их.
но работать корректно не хотят.
так вот же нада и к вопросу перейти.
а вопрос вот в чем:


когда вызываю с активити сервис

Java
1
2
3
intent = new Intent(MainActivity.this, MyService.class).putExtra("action", action);
        
            startService(intent);
запускается сервис

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
public class MyService extends Service {
     
  final String LOG_TAG = "myLogs";
  
  public void onCreate() {
    super.onCreate();
    Log.d(LOG_TAG, "onCreate");
  }
  
  public int onStartCommand(Intent intent, int flags, int startId) {
    Log.d(LOG_TAG, "onStartCommand");
  String action = intent.getStringExtra("action");
 
 
    someTask();
    return super.onStartCommand(intent, flags, startId);
  }
  
  
 
 
  public void onDestroy() {
    super.onDestroy();
    Log.d(LOG_TAG, "onDestroy");
  }
 
  public IBinder onBind(Intent intent) {
    Log.d(LOG_TAG, "onBind");
    return null;
  }
  
 
     
 
  
  void someTask() {
        new Thread(new Runnable() {
          public void run() {
            for (int i = 1; i<=3; i++) {
              Log.d(LOG_TAG, "i = " + i);
            
            
              try {
                TimeUnit.SECONDS.sleep(1);
              } catch (InterruptedException e) {
                e.printStackTrace();
              }
            }
           
          }
        }).start();
      }
}
после его отработки или во время отработки если закрыть активити и убрать из памяти то сервис создается заново и отсчет в логах идет с начала или появляется ошибка что не может принять интент.
проще говоря сервис почемуто создается заново.
как быть?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.03.2014, 17:13     Service автозапуск после закрытия родителя
Посмотрите здесь:

Android После закрытия программы продолжает идти звук
Android Автозапуск приложений. Service
Android Не освобождаются ресурсы после закрытия Activity
Как сохранить состояние Service после перезагрузки телефона? Android
Android Запуск таймера после закрытия второй Активити
Android Какой метод фрагмента срабатывает после закрытия диалога?
Автозапуск приложения после его закрытия Android
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
angryrobot
Командир зеленых роботов
 Аватар для angryrobot
346 / 283 / 53
Регистрация: 08.10.2013
Сообщений: 563
08.03.2014, 23:31     Service автозапуск после закрытия родителя #2
Цитата Сообщение от derec Посмотреть сообщение
как быть?
Когда сервис закончит делать свои дела, вызовите метод stopSelf()
После этого сервис выключится и не будет перезапускаться.
derec
0 / 0 / 0
Регистрация: 29.01.2014
Сообщений: 74
09.03.2014, 09:38  [ТС]     Service автозапуск после закрытия родителя #3
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  void someTask(final Intent intent) {
        new Thread(new Runnable() {
          public void run() {
            for (int i = 1; i<=30; i++) {
              Log.d(LOG_TAG, "i = " + i);
            
            sendNotif(i, pIntent1, intent.getStringExtra("up_text"),  intent.getStringExtra("bottom_text"));
              try {
                TimeUnit.SECONDS.sleep(1);
              } catch (InterruptedException e) {
                e.printStackTrace();
              }
            }
            stopSelf();
          }
        }).start();
      }
все равно крошится
мне нужно чтоб сервис продолжал работать даже после закрытия активити
angryrobot
Командир зеленых роботов
 Аватар для angryrobot
346 / 283 / 53
Регистрация: 08.10.2013
Сообщений: 563
09.03.2014, 09:45     Service автозапуск после закрытия родителя #4
Цитата Сообщение от derec Посмотреть сообщение
все равно крошится
Показывайте стектрейс
derec
0 / 0 / 0
Регистрация: 29.01.2014
Сообщений: 74
09.03.2014, 09:59  [ТС]     Service автозапуск после закрытия родителя #5
03-09 05:34:06.804: D/myLogs(588): i = 13
03-09 05:34:06.854: W/System.err(588): java.lang.NullPointerException
03-09 05:34:06.864: W/System.err(588): at com.k.t.MyService.sendNotif(MyService.java:67)
03-09 05:34:06.864: W/System.err(588): at com.k.t.MyService$1.run(MyService.java:113)
03-09 05:34:06.874: W/System.err(588): at java.lang.Thread.run(Thread.java:856)
03-09 05:34:09.424: D/myLogs(588): i = 14
03-09 05:34:09.424: W/System.err(588): java.lang.NullPointerException
03-09 05:34:09.424: W/System.err(588): at com.k.t.MyService.sendNotif(MyService.java:67)
03-09 05:34:09.424: W/System.err(588): at com.k.t.MyService$1.run(MyService.java:113)
03-09 05:34:09.424: W/System.err(588): at java.lang.Thread.run(Thread.java:856)
/// останавливаю активити и сесвис запускатся занво хотя мне нужно чтобы он продолжал выполнятся
03-09 05:34:15.325: D/myLogs(606): onCreate
03-09 05:34:15.334: D/myLogs(606): onStartCommand
03-09 05:34:15.334: D/myLogs(606): i = 1
03-09 05:34:15.344: W/dalvikvm(606): threadid=11: thread exiting with uncaught exception (group=0x409c01f8)
03-09 05:34:15.344: E/AndroidRuntime(606): FATAL EXCEPTION: Thread-78
03-09 05:34:15.344: E/AndroidRuntime(606): java.lang.NullPointerException
03-09 05:34:15.344: E/AndroidRuntime(606): at com.k.t.MyService$1.run(MyService.java:113)
03-09 05:34:15.344: E/AndroidRuntime(606): at java.lang.Thread.run(Thread.java:856)
angryrobot
Командир зеленых роботов
 Аватар для angryrobot
346 / 283 / 53
Регистрация: 08.10.2013
Сообщений: 563
09.03.2014, 10:07     Service автозапуск после закрытия родителя #6
Цитата Сообщение от derec Посмотреть сообщение
все равно крошится
И заодно покажите полностью содержимое файла MyService.java
derec
0 / 0 / 0
Регистрация: 29.01.2014
Сообщений: 74
09.03.2014, 10:10  [ТС]     Service автозапуск после закрытия родителя #7
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
package com.k.t;
 
 
import java.net.URISyntaxException;
import java.util.concurrent.TimeUnit;
 
import android.R.integer;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.graphics.BitmapFactory;
import android.os.IBinder;
import android.util.Log;
 
public class MyService extends Service {
      NotificationManager nm;
      Intent intent1;
      PendingIntent pIntent1 ;
  final String LOG_TAG = "myLogs";
  
  public void onCreate() {
    super.onCreate();
    Log.d(LOG_TAG, "onCreate");
  }
  
  public int onStartCommand(Intent intent, int flags, int startId) {
    Log.d(LOG_TAG, "onStartCommand");
 
 
    someTask(intent);
   return super.onStartCommand(intent, flags, startId);
  }
  
  
  Intent createIntent(String action, String extra) {
        Intent intent = new Intent(this, MyService.class);
        intent.setAction(action);
        intent.putExtra("extra", extra);
      
        return intent;
      }
 
  public void onDestroy() {
    super.onDestroy();
    Log.d(LOG_TAG, "onDestroy");
  }
 
  public IBinder onBind(Intent intent) {
    Log.d(LOG_TAG, "onBind");
    return null;
  }
  
  void sendNotif(int id, String up_text, String bottom_text) {
      
      Context context = getApplicationContext();
 
        Intent notificationIntent = new Intent(context, MainActivity.class);
        PendingIntent contentIntent = PendingIntent.getActivity(context,
                0, notificationIntent,
                PendingIntent.FLAG_CANCEL_CURRENT);
 
        NotificationManager nm = (NotificationManager) context 
                .getSystemService(Context.NOTIFICATION_SERVICE);
        Resources res = context.getResources();
        Notification.Builder builder = new Notification.Builder(context);
 
        builder.setContentIntent(contentIntent)
                    .setSmallIcon(R.drawable.ic_launcher)
               .setLargeIcon(BitmapFactory.decodeResource(res, R.drawable.t))
                    .setTicker("Уведомление ")
                    .setWhen(System.currentTimeMillis())
                    .setAutoCancel(true)
                    .setContentTitle("Welcome "+up_text)
                    .setContentText("Your id: "+bottom_text);
        
        Notification n = builder.getNotification();
 
        nm.notify(id, n);
      }
 
  
  void someTask(final Intent intent) {
        new Thread(new Runnable() {
          public void run() {
            for (int i = 1; i<=30; i++) {
              Log.d(LOG_TAG, "i = " + i);
            
            sendNotif(i, intent.getStringExtra("up_text"),  intent.getStringExtra("bottom_text"));
              try {
                TimeUnit.SECONDS.sleep(1);
              } catch (InterruptedException e) {
                e.printStackTrace();
              }
            stopSelf();
            }
          }
        }).start();
      }
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.03.2014, 11:19     Service автозапуск после закрытия родителя
Еще ссылки по теме:

AlarmManager не работает после закрытия приложения Android
Кнопки удаляются после закрытия приложения Android
Android Открытие приложенея после клика на нотификации (Service, notification)
Android Service, работающий даже после выключения пользователем приложения Android
Android Как сделать так, чтобы Service работал после закрытия программы

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
angryrobot
Командир зеленых роботов
 Аватар для angryrobot
346 / 283 / 53
Регистрация: 08.10.2013
Сообщений: 563
09.03.2014, 11:19     Service автозапуск после закрытия родителя #8
Сообщение было отмечено автором темы, экспертом или модератором как ответ
derec,
Вот попробуйте мой код:

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
package com.k.t;
 
import java.net.URISyntaxException;
import java.util.concurrent.TimeUnit;
 
import android.R.integer;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.graphics.BitmapFactory;
import android.os.IBinder;
import android.util.Log;
 
public class MyService extends Service {
      NotificationManager nm;
      Intent intent1;
      PendingIntent pIntent1 ;
  final String LOG_TAG = "myLogs";
  
  public void onCreate() {
    super.onCreate();
    Log.d(LOG_TAG, "onCreate");
  }
  
  public int onStartCommand(Intent intent, int flags, int startId) {
    Log.d(LOG_TAG, "onStartCommand");
 
 
    someTask(intent);
   return START_NOT_STICKY;
  }
  
  
  Intent createIntent(String action, String extra) {
        Intent intent = new Intent(this, MyService.class);
        intent.setAction(action);
        intent.putExtra("extra", extra);
      
        return intent;
      }
 
  public void onDestroy() {
    super.onDestroy();
    Log.d(LOG_TAG, "onDestroy");
  }
 
  public IBinder onBind(Intent intent) {
    Log.d(LOG_TAG, "onBind");
    return null;
  }
  
  void sendNotif(int id, String up_text, String bottom_text) {
      
      Context context = getApplicationContext();
 
        Intent notificationIntent = new Intent(context, MainActivity.class);
        PendingIntent contentIntent = PendingIntent.getActivity(context,
                0, notificationIntent,
                PendingIntent.FLAG_CANCEL_CURRENT);
 
        NotificationManager nm = (NotificationManager) context 
                .getSystemService(Context.NOTIFICATION_SERVICE);
        Resources res = context.getResources();
        Notification.Builder builder = new Notification.Builder(context);
 
        builder.setContentIntent(contentIntent)
                    .setSmallIcon(R.drawable.ic_launcher)
               .setLargeIcon(BitmapFactory.decodeResource(res, R.drawable.ic_launcher))
                    .setTicker("Уведомление ")
                    .setWhen(System.currentTimeMillis())
                    .setAutoCancel(true)
                    .setContentTitle("Welcome "+up_text)
                    .setContentText("Your id: "+bottom_text);
        
        Notification n = builder.getNotification();
        if (id == 1) {
            startForeground(id, n);
            return;
        }
        nm.notify(id, n);
      }
 
  
  void someTask(final Intent intent) {
        new Thread(new Runnable() {
          public void run() {
            for (int i = 1; i<=30; i++) {
              Log.d(LOG_TAG, "i = " + i);
            
            sendNotif(i, intent.getStringExtra("up_text"),  intent.getStringExtra("bottom_text"));
              try {
                TimeUnit.SECONDS.sleep(1);
              } catch (InterruptedException e) {
                e.printStackTrace();
              }
            }
            stopForeground(false);
            stopSelf();
          }
        }).start();
      }
}
Yandex
Объявления
09.03.2014, 11:19     Service автозапуск после закрытия родителя
Ответ Создать тему
Опции темы

Текущее время: 12:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru