2016-08-18 4 views
0

私は5〜10のサービスを呼び出す必要があるアプリケーションで作業しています。サービスを1つずつ呼び出す必要があります。 2番目のサービスを呼び出すには、これが作業フローです。私は目的のためにインテントサービスを使用しました。効率的な方法でこれを達成する方法。インテントサービスを使用して1つずつアクティビティで5つのサービスを呼び出す方法

このmainactivity

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     Intent service_1=new Intent(MainActivity.this,Service1.class); 
     startService(service_1); 
     Intent service_2=new Intent(MainActivity.this,Service2.class); 
     startService(service_2); 
     Intent service_3=new Intent(MainActivity.this,Service3.class); 
     startService(service_3); 

    } 

} 

第一サービス

public class Service1 extends IntentService{ 

    public Service1() { 
     super("serviceone"); 
    } 



    @Override 
    protected void onHandleIntent(Intent intent) { 

     for(int i=0;i<1000;i++) 
     { 
      Log.e("service1","service1::............."+i); 
     } 

    } 
} 

第二サービス

public class Service2 extends IntentService { 

    public Service2() { 
     super("service2"); 
    } 

    @Override 
    protected void onHandleIntent(Intent intent) { 


     for(int i=0;i<100;i++) 
     { 
      Log.e("service2", "service::2*****************" + i); 
     } 

    } 
} 

第三のサービス

public class Service3 extends IntentService{ 

    public Service3() { 
     super("service3"); 
    } 

    @Override 
    protected void onHandleIntent(Intent intent) { 

     for(int i=0;i<100;i++) 
     { 
      Log.e("service3", "service::3####################" + i); 
     } 
    } 
} 

IAM取得ログ

ce1: service1::.............323 
08-18 16:12:14.441 6614-6640/homedashboard.egrove.com.multipleservice E/service1: service1::.............324 
08-18 16:12:14.441 6614-6640/homedashboard.egrove.com.multipleservice E/service1: service1::.............325 
08-18 16:12:14.441 6614-6640/homedashboard.egrove.com.multipleservice E/service1: service1::.............326 
08-18 16:12:14.441 6614-6640/homedashboard.egrove.com.multipleservice E/service1: service1::.............327 
08-18 16:12:14.441 6614-6640/homedashboard.egrove.com.multipleservice E/service1: service1::.............328 
08-18 16:12:14.441 6614-6640/homedashboard.egrove.com.multipleservice E/service1: service1::.............329 
08-18 16:12:14.453 6614-6641/homedashboard.egrove.com.multipleservice E/service2: service::2*****************0 
08-18 16:12:14.453 6614-6641/homedashboard.egrove.com.multipleservice E/service2: service::2*****************1 
08-18 16:12:14.453 6614-6641/homedashboard.egrove.com.multipleservice E/service2: service::2*****************2 
08-18 16:12:14.453 6614-6641/homedashboard.egrove.com.multipleservice E/service2: service::2*****************3 
08-18 16:12:14.453 6614-6641/homedashboard.egrove.com.multipleservice E/service2: service::2*****************4 
08-18 16:12:14.453 6614-6641/homedashboard.egrove.com.multipleservice E/service2: service::2*****************5 
08-18 16:12:14.453 6614-6641/homedashboard.egrove.com.multipleservice E/service2: service::2*****************6 
08-18 16:12:14.453 6614-6641/homedashboard.egrove.com.multipleservice E/service2: service::2*****************7 
08-18 16:12:14.453 6614-6641/homedashboard.egrove.com.multipleservice E/service2: service::2*****************8 
08-18 16:12:14.453 6614-6641/homedashboard.egrove.com.multipleservice E/service2: service::2*****************9 
08-18 16:12:14.453 6614-6641/homedashboard.egrove.com.multipleservice E/service2: service::2*****************10 
08-18 16:12:14.453 6614-6641/homedashboard.egrove.com.multipleservice E/service2: service::2*****************11 
08-18 16:12:14.453 6614-6641/homedashboard.egrove.com.multipleservice E/service2: service::2*****************12 
08-18 16:12:14.453 6614-6641/homedashboard.egrove.com.multipleservice E/service2: service::2*****************13 
08-18 16:12:14.453 6614-6641/homedashboard.egrove.com.multipleservice E/service2: service::2*****************14 
08-18 16:12:14.454 6614-6641/homedashboard.egrove.com.multipleservice E/service2: service::2*****************15 
08-18 16:12:14.454 6614-6641/homedashboard.egrove.com.multipleservice E/service2: service::2*****************16 
08-18 16:12:14.454 6614-6641/homedashboard.egrove.com.multipleservice E/service2: service::2*****************17 
08-18 16:12:14.454 6614-6641/homedashboard.egrove.com.multipleservice E/service2: service::2*****************18 
08-18 16:12:14.454 6614-6641/homedashboard.egrove.com.multipleservice E/service2: service::2*****************19 
08-18 16:12:14.454 6614-6641/homedashboard.egrove.com.multipleservice E/service2: service::2*****************20 
08-18 16:12:14.454 6614-6641/homedashboard.egrove.com.multipleservice E/service2: service::2*****************21 
08-18 16:12:14.454 6614-6641/homedashboard.egrove.com.multipleservice E/service2: service::2*****************22 
08-18 16:12:14.454 6614-6641/homedashboard.egrove.com.multipleservice E/service2: service::2*****************23 
08-18 16:12:14.454 6614-6641/homedashboard.egrove.com.multipleservice E/service2: service::2*****************24 
08-18 16:12:14.457 6614-6640/homedashboard.egrove.com.multipleservice E/service1: service1::.............330 
08-18 16:12:14.457 6614-6640/homedashboard.egrove.com.multipleservice E/service1: service1::.............331 
08-18 16:12:14.457 6614-6640/homedashboard.egrove.com.multipleservice E/service1: service1::.............332 

第二のアプローチ

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     //Intent service_2 = new Intent(MainActivity.this, Service2.class); 
     // startService(service_2); 
     //Intent service_3 = new Intent(MainActivity.this, Service3.class); 
     // startService(service_3); 




     AlarmManager alarmManager=(AlarmManager)getSystemService(Context.ALARM_SERVICE); 
     Intent intent1 = new Intent(MainActivity.this, AlarmReceiver.class); 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent1, 0); 
     alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis(),10000, 
       pendingIntent); 

    } 

} 

放送受信機

public class AlarmReceiver extends BroadcastReceiver 
{ 

    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     //get and send location information 

     Intent service_1 = new Intent(context, Service1.class); 
     context.startService(service_1); 

     Intent service_2 = new Intent(context, Service2.class); 
     context.startService(service_2); 

    } 
} 

サービスクラス

public class Service1 extends IntentService{ 

    public Service1() { 
     super("serviceone"); 
    } 



    @Override 
    protected void onHandleIntent(Intent intent) { 

     forloopMethod(); 


    } 


    private void forloopMethod() 

    { 
     for(int i=0;i<10000;i++) 
     { 
      Log.e("service1","service1::.serviceone............"+i); 
     } 
    } 
} 

エラーログ

ice E/service1: service1::.serviceone............9837 
08-18 17:47:39.916 12517-21515/homedashboard.egrove.com.multipleservice E/service1: service1::.serviceone............9838 
08-18 17:47:39.916 12517-21515/homedashboard.egrove.com.multipleservice E/service1: service1::.serviceone............9839 
08-18 17:47:39.916 12517-21515/homedashboard.egrove.com.multipleservice E/service1: service1::.serviceone............9840 
08-18 17:47:39.916 12517-21515/homedashboard.egrove.com.multipleservice E/service1: service1::.serviceone............9841 
08-18 17:47:39.936 12517-21516/homedashboard.egrove.com.multipleservice E/service2: service::2*****************9751 
08-18 17:47:39.936 12517-21516/homedashboard.egrove.com.multipleservice E/service2: service::2*****************9752 
08-18 17:47:39.936 12517-21516/homedashboard.egrove.com.multipleservice E/service2: service::2*****************9753 
08-18 17:47:39.936 12517-21516/homedashboard.egrove.com.multipleservice E/service2: service::2*****************9754 

同じIが完了した最初のサービス.After最初のサービスコールをしたいとして、第2のサービスのcall.Thisになるだろう取得私need..help

+0

なぜあなたは 'BroadcastReceiver'にしようとしないのですか? 'サービス 'が開始されるたびに、' Activity'に登録された 'BroadcastReceiver'にメッセージを送ります。そのメッセージに応じて、今すぐ開始したいサービスを決定します。 –

+0

以下のコードをご覧ください –

+0

どのコードを指していますか?以下のコードは見つかりませんでした:( –

答えて

0

あるサービスがに終了したときは、ブロードキャストを送信することができます活動を知らせる。

サンプル実装:

public class MainActivity extends AppCompatActivity { 
    public void onCreate() { 
     ... 
     mMyReceiver = new MyReceiver(this); 
     LocalBroadcastManager.getInstance(this).registerReceiver(mMyReceiver, new IntentFilter(SERVICE_FINISHED_ACTION)); 
    } 

    public void onDestroy() { 
     if (mMyReceiver != null) { 
      LocalBroadcastManager.getInstance(this).unregisterReceiver(mMyReceiver); 
     } 
     super.onDestroy(); 
    } 

    public void launchServiceTwo() { 
     Intent service2 = new Intent(MainActivity.this, Service2.class); 
     startService(service2); 
    } 

    ... 

    private static class MyReceiver extends BroadcastReceiver { 

     private final WeakReference<MainActivity> mWeakActivity; 

     public MyReceiver(@NonNull MainActivity activity) { 
      mWeakActivity = new WeakReference<>(activity); 
     } 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      Bundle bundle = intent.getExtras(); 

      MainActivity listener = mWeakActivity.get(); 
      if (listener != null && bundle != null) { 
       String serviceFinishedExtra = bundle.getString(SERVICE_FINISHED_EXTRA); 
       if ("Service1".equalsIgnoreCase(serviceFinishedExtra)) { 
        launchServiceTwo(); 
       } else if ("Service2".equalsIgnoreCase(serviceFinishedExtra)) { 
        launchServiceThree(); 
       } else if ... 
      } 
     } 

    } 
} 

public class Service1 extends IntentService { 

    @Override 
    protected void onHandleIntent(Intent intent) { 
     ... 
     Intent broadcastIntent = new Intent(); 
     broadcastIntent.setAction(SERVICE_FINISHED_ACTION); 
     broadcastIntent.addCategory(Intent.CATEGORY_DEFAULT); 
     broadcastIntent.putExtra(SERVICE_FINISHED_EXTRA, "Service1"); 
     sendBroadcast(broadcastIntent); 
    } 

} 
+0

AlarmManager alarmManager =(AlarmManager)getSystemService(Context.ALARM_SERVICE); インテントintent1 =新しいインテント(MainActivity.isis、これは、 AlarmReceiver.class); PendingIntent pendingIntent = PendingIntent.getBroadcast(thi s、0、intent1、0); alarmManager.setRepeating(AlarmManager.RTC_WAKEUP、System.currentTimeMillis()、10000、 pendingIntent); –

+0

私は10秒ごとにそのサービスを呼び出すためにコードを使用しています。あなたのコードにこのコードをどのように統合できますか? –

+0

あなたが達成しようとしていることをより良く説明してください。元の質問は、さまざまなサービスを順次呼び出す方法でした。アラームマネージャーを使用していることを伝えています。何故ですか?あなたは、サービスを順番に実行しようとしているのか、一定の時間ごとに繰り返し実行しようとしていますか? – fernandospr

関連する問題