Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/10: Рейтинг темы: голосов - 10, средняя оценка - 4.50
derec
0 / 0 / 0
Регистрация: 29.01.2014
Сообщений: 74
1

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

08.03.2014, 17:13. Просмотров 1946. Ответов 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();
      }
}
после его отработки или во время отработки если закрыть активити и убрать из памяти то сервис создается заново и отсчет в логах идет с начала или появляется ошибка что не может принять интент.
проще говоря сервис почемуто создается заново.
как быть?
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.03.2014, 17:13
Ответы с готовыми решениями:

Автозапуск приложения после его закрытия
Всем привет. Хочу сделать автозапуск приложения после его закрытия или...

Как сделать так, чтобы Service работал после закрытия программы
Здравствуйте! Никак не могу разобраться, как сделать так, чтобы Service...

Автозапуск приложений. Service
Здравствуйте! Подскажите пожалуйста решение в такой ситуации! Есть...

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

AlarmManager не работает после закрытия приложения
Всем привет, сделал ресивер + нацепил туда alarm вот код в классе ресивера ...

7
angryrobot
Командир зеленых роботов
348 / 285 / 54
Регистрация: 08.10.2013
Сообщений: 565
08.03.2014, 23:31 2
Цитата Сообщение от derec Посмотреть сообщение
как быть?
Когда сервис закончит делать свои дела, вызовите метод stopSelf()
После этого сервис выключится и не будет перезапускаться.
0
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();
      }
все равно крошится
мне нужно чтоб сервис продолжал работать даже после закрытия активити
0
angryrobot
Командир зеленых роботов
348 / 285 / 54
Регистрация: 08.10.2013
Сообщений: 565
09.03.2014, 09:45 4
Цитата Сообщение от derec Посмотреть сообщение
все равно крошится
Показывайте стектрейс
0
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)
0
angryrobot
Командир зеленых роботов
348 / 285 / 54
Регистрация: 08.10.2013
Сообщений: 565
09.03.2014, 10:07 6
Цитата Сообщение от derec Посмотреть сообщение
все равно крошится
И заодно покажите полностью содержимое файла MyService.java
0
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();
      }
}
0
angryrobot
Командир зеленых роботов
348 / 285 / 54
Регистрация: 08.10.2013
Сообщений: 565
09.03.2014, 11:19 8
Лучший ответ Сообщение было отмечено derec как решение

Решение

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();
      }
}
1
09.03.2014, 11:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.03.2014, 11:19

Не перемещать фокус после закрытия клавиатуры
На форме три EditText – 1,2,3. После ввода текста в 1 и нажатию ентер фокус...

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

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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