2016-08-02 5 views
0

Ich habe eine Aktivität, die einige Daten (Edittext und Bild) in der Datenbank speichert. Dienst läuft irgendwann und manchmal nicht. Ich nehme das Bild für Bildansicht plus einige Textdaten und übergebe es an den Dienst, der meine Datenbankklasse aufruft. Warum wird der Service nicht jedes Mal aufgerufen?Manchmal wird der Service angerufen und manchmal nicht

Übergabe von Daten an Service:

imgView = (ImageView)findViewById(R.id.imageView2); 
    if(imgView.getDrawable()==null) { 
     imageData = null ; 
    } 
    else { 
     Bitmap bitmap = ((BitmapDrawable) imgView.getDrawable()).getBitmap(); 
      imageData = getBytes(bitmap); 
    } 

    Intent i = new Intent(this,TaskService.class); 
    i.putExtra("heading",s); 
    i.putExtra("subject",s1); 
    i.putExtra("date",s2); 
    i.putExtra("notes",s3); 
    i.putExtra("imageData",imageData); 
    startService(i); 

und dies ist meine Dienstklasse: (TaskDatabaseClass das ist meine db Klasse)

public class TaskService extends Service { 

String s,s1,s2,s3; 
byte[] imagedata; 
public TaskService() { 
} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 

    s = intent.getStringExtra("heading"); 
    s1 = intent.getStringExtra("subject"); 
    s2 = intent.getStringExtra("date"); 
    s3 = intent.getStringExtra("notes"); 
    imagedata = intent.getByteArrayExtra("imageData"); 

    Runnable r = new Runnable() { 
     @Override 
     public void run() { 
      try{ 
       TaskDatabaseClass enterData = new TaskDatabaseClass(TaskService.this); 
       enterData.open(); 
       enterData.createEntry(s,s1,s2,s3,imagedata); 
       enterData.close(); 
      }catch(Exception e) { 
       } 
     } 
    }; 
    Thread thread = new Thread(r); 
    thread.start(); 
    this.stopSelf(); 
    return 0; 
} 

@Override 
public void onDestroy() { 
    Log.i(TAG ," destroying "); 
} 

@Override 
public IBinder onBind(Intent intent) { 
    // TODO: Return the communication channel to the service. 
    // throw new UnsupportedOperationException("Not yet implemented"); 
    return null; 
+1

Ich denke, es ist, weil Sie den Dienst stoppen - Wie Dokumentationen nur Einzelruf zu stoppen stoppt den gesamten Dienst – X3Btel

+0

https://developer.android.com/guide/components/services.html können Sie versuchen, mit storself (startId); – X3Btel

+0

@ X3Btel er kehrt 'START_STICKY_COMPATIBILITY' zurück. Also sollte 'stopSelf()' genug sein. – Shaishav

Antwort

1

Es scheint, dass Sie ein wenig Datenbank Schreiboperation tun in Ihre Service. Dies erscheint überflüssig, da Android-Dienste für diese Aufgaben nicht geeignet sind (nicht dass sie nutzlos wären). Wenn Sie einfach einen neuen Thread erstellen müssen, können Sie den gleichen Vorgang in einem neuen Thread (genau wie in Ihrem Dienst) sogar von Ihrem Activity aufrufen und es wäre sehr effizient das aktuelle Setup.

Diese Aufgabe in der Service schafft nicht nur einen Overhead auf dem Android-System der Erstellung eines Service und Aufrechterhaltung seines Lebenszyklus, auch müssen Sie sich Sorgen über Datenübertragung über Intents, die einen zusätzlichen Overhead auf dem System ist.

Sie können mehr über die Verwendung von Services über here unter der Überschrift "Was ist Service" lesen.

+0

Ich werde tun, was Sie gesagt haben und dann informieren Sie !! – aman003

+0

einige Probleme sind reduziert. Vielen Dank! – aman003