我正在为 android 编写一个小型聊天客户端。所以我想要的行为是,我的应用程序正在后台监听新消息并将它们显示在通知区域(只有我的应用程序的图标)。收听传入的消息应该是一件非常长期的事情 - 可能在关闭 ui 线程后的几天内
我的问题是:怎么做?我应该有自己的流程服务吗?我应该为监听器启动一个 AsyncTask 吗?还是有更好的方法来做到这一点?如果我使用新的服务流程,是否需要使用 AIDL?
我正在为 android 编写一个小型聊天客户端。所以我想要的行为是,我的应用程序正在后台监听新消息并将它们显示在通知区域(只有我的应用程序的图标)。收听传入的消息应该是一件非常长期的事情 - 可能在关闭 ui 线程后的几天内
我的问题是:怎么做?我应该有自己的流程服务吗?我应该为监听器启动一个 AsyncTask 吗?还是有更好的方法来做到这一点?如果我使用新的服务流程,是否需要使用 AIDL?
怎么做?
让您的聊天服务器使用 GCM将聊天消息推送到设备。
我应该有自己的流程服务吗?
不。
首先,它不需要在自己的过程中。
其次,这将要求您始终保持服务运行,这是许多用户不喜欢的。
第三,这将要求您始终保持设备处于开机状态,并且 WiFi 无线电始终处于开机状态,用户不会对此感到满意。例外情况:如果您在支持移动数据的设备(例如,电话)上运行,并且您非常小心,您可以在设备处于睡眠状态时保持与服务器的开放套接字连接。这很难正常工作。
我应该为监听器启动一个 AsyncTask 吗?
可能不是。
还是有更好的方法来做到这一点?
让您的聊天服务器使用 GCM将聊天消息推送到设备。
或者,可能,将您的聊天服务器更改为在排队模型上工作,以便您可以定期轮询(在用户可配置的时间间隔内)以获取可用消息。
如果我使用新的服务流程,是否需要使用 AIDL?
不。