Android为推送器创建线程以在后台运行

时间:2016-07-01 06:57:33

标签: android multithreading

在我的应用中,我通过推送器立即从我的服务器收到我的消息。我创建了一个服务,用于处理连接并向我的应用程序中的其他活动发送广播消息。

我现在面临的问题是让这个服务在新线程中运行,即使我的应用程序转到后台也能运行它。我从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"));
        }
    }
};

1 个答案:

答案 0 :(得分:0)

事实证明,一个进程的多线程并不能解决我的问题。

相反,我将服务拆分为一个新流程,这将使服务运行独立于主线程的状态。处理。经过测试,发现当我的活动进入后台时服务不会停止。