私のアプリでは、プッシャーを介して私のサーバーから即座にメッセージを受け取ります。私は、接続を処理し、ブロードキャストメッセージをアプリケーション内の他のアクティビティに送信するように指定されたサービスを作成しました。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"));
}
}
};