2016-08-02 37 views
0

私は、データベースにいくつかのデータ(edittextとimage)を保存するアクティビティを持っています。 サービスはいつか実行されますが、サービスが実行されないことがあります。私はimageviewといくつかのテキストデータのイメージを取って、私のデータベースクラスを呼び出すサービスに渡しています。なぜ、毎回サービスが呼び出されないのですか?サービスが呼び出され、時にはサービスが呼び出されない場合があります

サービスにデータを渡す:

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); 

と、これは私のサービスクラスである:(TaskDatabaseClassが、これは私のデシベルクラスです)

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

私はあなたがstopselfで試すことができ、自己を停止する唯一の単一の呼び出しがhttps://developer.android.com/guide/components/services.html全体のサービス – X3Btel

+0

をstopes doccumentationsあたりとして、あなたはservice-を停止しているので、それだと思います(startId); – X3Btel

+0

@ X3Btel彼は 'START_STICKY_COMPATIBILITY'を返しています。したがって、 'stopSelf()'で十分です。 – Shaishav

答えて

1

あなたがデータベース書き込み操作のビットを行っているようですあなたのService Androidサービスはこれらのタスクには適していないため、これは冗長なようです(無駄ではない)。単に新しいスレッドを生成する必要がある場合は、Activityの新しいスレッド(サービスのような)で同じ操作を呼び出すことができ、現在の設定よりも効率的です。

このタスクをServiceで実行すると、Serviceを作成してライフサイクルを維持するオーバーヘッドがAndroidシステムに作成されるだけでなく、インテントによるデータ転送を心配する必要があります。

Servicesの使用方法については、hereの「サービスとは」の説明を参照してください。

+0

あなたが言ったようにして、あなたに知らせる! – aman003

+0

いくつかの問題が軽減されます。ありがとう! – aman003

関連する問題