我使用XMPP server
与Android
中的Smack
相关联。这是我的代码:
static void openConnection() {
try {
if (null == connection || !connection.isAuthenticated()) {
XMPPTCPConnectionConfiguration.Builder configuration = XMPPTCPConnectionConfiguration.builder();
configuration.setHost(SERVER_HOST);
configuration.setPort(SERVER_PORT);
configuration.setServiceName(SERVICE_NAME);
configuration.setUsernameAndPassword(new TinyDB(context.getApplicationContext()).getString("username"), new TinyDB(context.getApplicationContext()).getString("password"));
configuration.setDebuggerEnabled(true);
connection = new XMPPTCPConnection(configuration.build());
connection.setUseStreamManagement(true);
connection.setUseStreamManagementResumption(true);
ReconnectionManager reconnectionManager = ReconnectionManager.getInstanceFor(connection);
reconnectionManager.enableAutomaticReconnection();
reconnectionManager.setReconnectionPolicy(ReconnectionManager.ReconnectionPolicy.RANDOM_INCREASING_DELAY);
connection.connect();
connection.login();
}
} catch (XMPPException xe) {
xe.printStackTrace();
} catch (SmackException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
所以当我拨打openConnection()
时,我应该在AsyncTask
中执行此操作,还是没有必要?我有点困惑。
答案 0 :(得分:1)
您应该在Android XMPP(TCP)Connection
内管理Service
。服务状态(运行/停止)应重新组合连接状态:当服务运行时,应建立连接或服务应尝试建立连接(如果数据连接可用)。如果服务停止,则还断开连接。
答案 1 :(得分:0)
是的,正如官方文件所指出的那样:
AsyncTask可以正确,轻松地使用UI线程。这个班 允许执行后台操作并在UI上发布结果 线程,而不必操纵线程和/或处理程序。
答案 2 :(得分:0)
当我调用openConnection()时,我应该在asynctask中执行此操作还是不需要?
很快,是。与networking
相关的所有内容都应移至another thread
,以避免阻止main thread
。因此,doInBackground()
的{{1}}会在另一个AsyncTask
上运行,您应该将其称为thread
。
答案 3 :(得分:0)
我在搜索后选择不使用AsyncTask作为我的smack项目。