我正在使用服务在我的应用程序中运行长后台任务,在服务中这些函数正在运行登录到XMPP并从XMPP服务器获取一些数据。我想显示登录完成后的进度条。如何从服务到活动获得响应以正确更新进度条以避免UI中的某些异常。 我这样称呼服务
final Intent gtalk_intent = new Intent(AccountsActivity.this, GtalkService.class);
gtalk_intent.putExtra("user_name", acc.getAcc_Name());
gtalk_intent.putExtra("user_pass", acc.getAcc_Pass());
startService(gtalk_intent);
这是来自服务的代码
public class PmService extends Service {
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}
public class PmBinder extends Binder {
public PmService getService() {
return PmService.this;
}
}
@Override
public void onCreate() {
super.onCreate();
context = this;
app_preferences = new AppPreferences(this);
chat_source = new ChatsDataSource(this);
chat_source.open();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Bundle extras = intent.getExtras();
if(extras == null) {
full_name = extras.getString("user_name");
if(full_name.contains("@")) {
String[] _na = full_name.split("@");
U_name = _na[0];
}
U_pass = extras.getString("user_pass");
}
new PmAsync().execute();
return START_STICKY;
}
private class PmAsync extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
}
@Override
protected Void doInBackground(Void... params) {
SASLAuthentication.supportSASLMechanism("PLAIN", 0);
ConnectionConfiguration config = new ConnectionConfiguration(server_host, SERVER_PORT, SERVICE_NAME);
configure(ProviderManager.getInstance());
m_connection = new XMPPConnection(config);
try {
m_connection.connect();
Roster.setDefaultSubscriptionMode(Roster.SubscriptionMode.manual);
} catch (XMPPException e) {
e.printStackTrace();
}
try {
m_connection.login(U_name, U_pass);
setPacketFilters();
} catch (XMPPException e) {
}
return null;
}
}
我想显示登录完成后的进度条,登录完成后如何响应服务?
答案 0 :(得分:0)
通过Binder
,您可以向Activity
发送回调,这意味着您可以更新用户界面。
Binder
添加方法(让我们将其命名为onProgress
)AsyncTask
Binder
来电方式
Activity
应该监听Binder
的更新,或者更具体地说 - 调用Binder.onProgress
方法的更新答案 1 :(得分:-1)
您可以通过覆盖onProgress()方法来更新进度条 这里是您可以参考的案例。link