2016-07-01 2 views
1

私のアプリでは、プッシャーを介して私のサーバーから即座にメッセージを受け取ります。私は、接続を処理し、ブロードキャストメッセージをアプリケーション内の他のアクティビティに送信するように指定されたサービスを作成しました。Androidは、プッシャーをバックグラウンドで実行するためのスレッドを作成します。

私が今直面している問題は、このサービスを新しいスレッドで実行して、アプリがバックグラウンドになっても実行できるようにすることです。私はthisから "サービススレッド"を作成して接続する必要があることがわかりましたが、プッシャーを使ってその例を見つけることはできません。

誰でもできる場合は、例を挙げてください。そうでない場合は、これらの「サービススレッド」を使用してコードを書くことにも役立ちます。おかげで、事前に助けを求めて:D

PusherService.java パブリッククラスPusherServiceは、それが一つのプロセスにマルチスレッド化することは私の問題を解決しないことが判明したサービス{

private static final String TAG = "PusherService"; 

    private Pusher pusher = new Pusher("myKey"); 
    private Channel channel = pusher.subscribe("cafe_channel"); 

    private JSONObject pusherJSONObj; 
    private Order order; 

    public PusherService() { 
    } 

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

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     //this service will run until we stop it 
     setupPusher(); 
     return START_STICKY; 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     Toast.makeText(this, "Service Stopped", Toast.LENGTH_LONG).show(); 
    } 

    private void setupPusher() { 
     Log.d(TAG, System.currentTimeMillis()+""); 
     channel.bind("customer_order", new SubscriptionEventListener() { 
      @Override 
      public void onEvent(String channelName, String eventName, final String data) { 
       Intent broadcastIntent = new Intent(); 

       try { 
        pusherJSONObj = new JSONObject(data); 
        order = new Order(pusherJSONObj); 

        broadcastIntent.setAction("customer_order"); 
        broadcastIntent.putExtra("message", "success"); 
        broadcastIntent.putExtra("order", order); 
       } catch (JSONException e) { 
        e.printStackTrace(); 
        Log.d("Pusher", "conversion failed"); 

        broadcastIntent.setAction("customer_order"); 
        broadcastIntent.putExtra("message", "JSON conversion error"); 
       } 

       sendBroadcast(broadcastIntent); 
      } 
     }); 

     pusher.connect(); 
    } 
} 

OrdersActivity.java

private BroadcastReceiver pusherReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     if(intent.getAction().equalsIgnoreCase("customer_order")) { 
      adapter.newOrder((Order) intent.getParcelableExtra("order")); 
     } 
    } 
}; 

答えて

0

を拡張します。

代わりに、サービスを新しいプロセスに分割しました。サービスがメインスレッド&プロセスのステータスとは独立して実行されます。テストして、私の活動がバックグラウンドになったときにサービスが停止しないことを発見しました。

関連する問題