【发布时间】:2012-03-28 15:41:37
【问题描述】:
我正在调用 AsyncTask 来停止以前启动的服务。 但是当 Asyctask 运行时 ProgressDialog 不会旋转。 所以我认为有问题,我可能会遇到 ANR 错误的问题。
有什么想法吗?
new asyncTaskZieladresse().execute();
public class asyncTaskZieladresse extends AsyncTask<Void, Integer, Void> {
int progress;
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
final Spinner Fahrerauswahl = (Spinner)findViewById(R.id.spinner1);
final Spinner Fahrzeugauswahl = (Spinner)findViewById(R.id.spinner2);
final Spinner Nutzungsartauswahl = (Spinner)findViewById(R.id.spinner3);
Cursor mcursor = (Cursor) Fahrerauswahl.getSelectedItem();
Fahrer = mcursor.getString(mcursor.getColumnIndexOrThrow("name"));
FahrerID = mcursor.getString(mcursor.getColumnIndexOrThrow("_id"));
mcursor.close();
Cursor mcursor1 = (Cursor) Fahrzeugauswahl.getSelectedItem();
Kennzeichen = mcursor1.getString(mcursor1.getColumnIndexOrThrow("fahrzeug_kennzeichen"));
KennzeichenID = mcursor1.getString(mcursor1.getColumnIndexOrThrow("_id"));
mcursor1.close();
Cursor mcursor2 = (Cursor) Nutzungsartauswahl.getSelectedItem();
Nutzungsart = mcursor2.getString(mcursor2.getColumnIndexOrThrow("nutzungsart"));
NutzungsartID = mcursor2.getString(mcursor2.getColumnIndexOrThrow("_id"));
mcursor2.close();
VariablenUebergebenGpsFahrt();
progressDialog.dismiss();
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
progressDialog = ProgressDialog.show(Main.this, "GPS", "Ziel-Standort wird ermittelt...");
}
@Override
protected void onProgressUpdate(Integer... values) {
// TODO Auto-generated method stub
}
@Override
protected Void doInBackground(Void... arg0) {
// TODO Auto-generated method stub
stopService(new Intent(Main.this, GPSService.class));
return null;
}
}
【问题讨论】:
-
既然您没有在后台做任何事情,那么拥有
AsyncTask有什么意义?这就像用一个空的run()方法分叉一个线程。 -
我有一个问题,有时似乎需要很长时间才能调用下一个活动。我正在做的是停止服务(在服务 onDestroy() 中是一些写入 sharedprefs 的值,因此我可以在服务在另一个活动中停止后从服务中读取收集的值),然后从微调器,通过 intent.putextra 移交微调器值,最后通过 startActivity(intent) 调用新活动。对我来说,stopService 似乎花了很多时间,所以我试图在 AsyncTask 中停止它。我错了吗?
-
stopService()应该不到一毫秒。它不直接做任何事情——服务的实际停止是异步发生的。 -
但我认为不是我在服务的 onDestroy() 方法中所做的事情。这可能需要更长的时间。
-
那么你的问题在于服务内部,而不是
stopService()调用。
标签: android service android-asynctask progressdialog