Autore Topic: Service mi consuma la batteria in breve tempo  (Letto 734 volte)

Offline Pia12

  • Nuovo arrivato
  • *
  • Post: 17
  • Respect: 0
    • Mostra profilo
Service mi consuma la batteria in breve tempo
« il: 03 Gennaio 2016, 00:07:04 CET »
0
Ciao a tutti e buon anno... è da tempo che provo a creare un service che mi controlli una volta al giorno, precisamente alle 7 di mattina, se sono presenti appuntamenti nel database locale costruito da me. Ci sono riuscito, ho utilizzato un service che controlla l'orario ogni ora e quando sono le 7 fa una query, ma come da titolo la mia applicazione mi drena la batteria in meno di tre ore.
il codice e il seguente:

Codice (Java): [Seleziona]
public class   MyService extends Service {
    private Timer timer;
    int gio, mes, ann, or, mi, ora_nota, minuti_nota;
    private DbAdapter db;
    public static Cursor cursor, cursor1;
    String oggetto, testo, id_nota;
    NotificationManager notificationManager;
    private static final int SIMPLE_NOTIFICATION_ID = 1;

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        db = new DbAdapter(this);
        notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        this.context = context;
        TimerTask task = new TimerTask() {

            @Override
            public void run() {
                Calendar c = Calendar.getInstance();
                SimpleDateFormat df = new SimpleDateFormat("HH-mm");
                String formattedDate = df.format(c.getTime());
                String ora = formattedDate.substring(0, 2);
                String minuti = formattedDate.substring(3, 5);
                gio = c.get(Calendar.DAY_OF_MONTH);
                mes = (c.get(Calendar.MONTH) + 1);
                ann = c.get(Calendar.YEAR);
                String arg1 = gio + "";
                String arg2 = mes + "";
                String arg3 = ann + "";
                String path_suono=null;
                Calendar cale = Calendar.getInstance();
                or = cale.get(Calendar.HOUR_OF_DAY);
                mi = cale.get(Calendar.MINUTE);
                db.open();
                cursor = db.fetchNOTAgiorno(arg1, arg2, arg3);
                cursor1= db.fetchAudio_Sveglia();
                while (cursor1.moveToNext()) {
                    path_suono=cursor1.getString(2);
                }

                if(cursor.getCount()!=0){

                    if (or == 7) {
//funzione che invia una notifica
                        sendSimpleNotificationGiornata("  ","Impegni del giorno");
                    }
                }

                while (cursor.moveToNext()) {
                    oggetto = cursor.getString(4);
                    testo = cursor.getString(5);
                    ora_nota = cursor.getInt(6);
                    minuti_nota = cursor.getInt(7);

                    if (ora_nota == or && minuti_nota == mi) {
//funzione che invia una notifica
                        sendSimpleNotification(testo, oggetto, path_suono);
                    }
                }
                db.close();
           }
        };
        timer = new Timer();
        timer.schedule(task, 0, 3600000);
 }

    @Override
    public void onDestroy() {
        super.onDestroy();
        timer.cancel();
        timer = null;
 }


    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        super.onStartCommand(intent, flags, startId);
        // TODO Auto-generated method stub
        startService(new Intent(this, MyService.class));
      return START_STICKY;
    }

Grazie attendo consigli.
« Ultima modifica: 03 Gennaio 2016, 00:10:57 CET da Pia12 »

Offline tonno16

  • Utente storico
  • *****
  • Post: 1228
  • Respect: +59
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Service mi consuma la batteria in breve tempo
« Risposta #1 il: 03 Gennaio 2016, 01:02:25 CET »
0
Mi fermo alle prime righe...
Anche se il tuo service fosse stato implementato bene...risulta improbabile che l'avvio di questo ogni ora dreni la batteria.  Cancella la tua idea. Ci sono metodi migliori.

USA un alarmmanager. Esso permette di "eseguire un certo metodo chiamato onReceive()" al raggiungimento di un countdown oppure ad una data prefissata.

Android invoca tale metodo. Puoi settare anche una ripetizione...ma non è il tuo caso.
Il service lo usi sol per fare qiery sul DB. Sempre e comunque.
Tale service verrà avviato dentro quel metodo che dicevo prima.
Tutto questo accadrà una sola volta alle 7.
Altro consiglio: usa le date espresse in millisecondo. Usa jodatime per estrapolare i valori di una data come per esempio il giorno del mese o il mese dell'anno (parlo di numeri interi)

Quindi cerca qualche guida sugli alarmmanager.

Offline Pia12

  • Nuovo arrivato
  • *
  • Post: 17
  • Respect: 0
    • Mostra profilo
Re:Service mi consuma la batteria in breve tempo
« Risposta #2 il: 04 Gennaio 2016, 02:10:23 CET »
0
Okok grazie seguirò il consiglio... In questo modo mica ci sono problemi da parte del sistema nella gestione dei processi?
Cioe mi spiego meglio, io avevo difficoltá a tenere attivo un service, perchè dopo un po di tempo il sistema me lo ammazzava e non mi controllava piú dal db. Utilizzando start_sticky e startservice nell'onstartcommand, facevo ripartire il service di nuovo una volta ammazzato.
« Ultima modifica: 04 Gennaio 2016, 02:24:21 CET da Pia12 »

Offline tonno16

  • Utente storico
  • *****
  • Post: 1228
  • Respect: +59
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Service mi consuma la batteria in breve tempo
« Risposta #3 il: 04 Gennaio 2016, 07:43:29 CET »
0
Android può killarlo comunque il tuo service. Nel mio scenario tale allarme viene sicuramente avviata. E hai molto meno consumo di batteria

Post unito: 04 Gennaio 2016, 07:43:49 CET
E ovviamente non devi usare startsticky

Offline Pia12

  • Nuovo arrivato
  • *
  • Post: 17
  • Respect: 0
    • Mostra profilo
Re:Service mi consuma la batteria in breve tempo
« Risposta #4 il: 04 Gennaio 2016, 14:29:12 CET »
0
va bene... grazie per la tua attenzione