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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
derec
0 / 0 / 0
Регистрация: 29.01.2014
Сообщений: 74
#1

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

08.03.2014, 17:13. Просмотров 1514. Ответов 7
Метки нет (Все метки)

Такой вопрос назрел несущей.
Есть актвити и сервис.
и подружить бы мне б их хотелось.
но есть проблема везкая.
дружбу дружбою сдружил я их.
но работать корректно не хотят.
так вот же нада и к вопросу перейти.
а вопрос вот в чем:


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

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
Здравствуйте! Никак не могу разобраться, как сделать так, чтобы Service работал после закрытия программы. Вот что я написал в...

Автозапуск приложений. Service - Программирование Android
Здравствуйте! Подскажите пожалуйста решение в такой ситуации! Есть Activity, при первой установки приложения по нажатии на Button...

AlarmManager не работает после закрытия приложения - Программирование Android
Всем привет, сделал ресивер + нацепил туда alarm вот код в классе ресивера public void SetAlarm(Context context) { AlarmManager...

Не освобождаются ресурсы после закрытия Activity - Программирование Android
Очередная непонятная проблема. Делаю в активити setContentView() с большим количеством ImageView. В результате когда запускаю новую, а для...

Кнопки удаляются после закрытия приложения - Программирование Android
Я создаю кнопки но не могу с ними взаимодействовать и их сохранять, можете помочь решить проблему? кнопки удаляются после закрытия...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
angryrobot
Командир зеленых роботов
346 / 283 / 53
Регистрация: 08.10.2013
Сообщений: 564
08.03.2014, 23:31 #2
Цитата Сообщение от derec Посмотреть сообщение
как быть?
Когда сервис закончит делать свои дела, вызовите метод stopSelf()
После этого сервис выключится и не будет перезапускаться.
derec
0 / 0 / 0
Регистрация: 29.01.2014
Сообщений: 74
09.03.2014, 09:38  [ТС] #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
Командир зеленых роботов
346 / 283 / 53
Регистрация: 08.10.2013
Сообщений: 564
09.03.2014, 09:45 #4
Цитата Сообщение от derec Посмотреть сообщение
все равно крошится
Показывайте стектрейс
derec
0 / 0 / 0
Регистрация: 29.01.2014
Сообщений: 74
09.03.2014, 09:59  [ТС] #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
Командир зеленых роботов
346 / 283 / 53
Регистрация: 08.10.2013
Сообщений: 564
09.03.2014, 10:07 #6
Цитата Сообщение от derec Посмотреть сообщение
все равно крошится
И заодно покажите полностью содержимое файла MyService.java
derec
0 / 0 / 0
Регистрация: 29.01.2014
Сообщений: 74
09.03.2014, 10:10  [ТС] #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();
      }
}
angryrobot
Командир зеленых роботов
346 / 283 / 53
Регистрация: 08.10.2013
Сообщений: 564
09.03.2014, 11:19 #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();
      }
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.03.2014, 11:19
Привет! Вот еще темы с ответами:

Не перезапускать сервис после закрытия и открытия приложения - Программирование Android
Приветствую. Такая проблема, на андройде сервис перезапускается после закрытия и открытия приложения. Надо чтобы сервис после...

После закрытия программы продолжает идти звук - Программирование Android
Здравствуйте. Такая проблема. Загружаю в WebView FlashPlayer с фильмом онлайн. Иногда даже после закрытия программы продолжает работать...

Запуск таймера после закрытия второй Активити - Программирование Android
Есть две Активити, на первой есть Chronometer. При запуске активити1 запускается таймер, при переходе в активити2 таймер в первой...

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
09.03.2014, 11:19
Ответ Создать тему
Опции темы

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