Android AsyncTask 重复进程半年
Posted
技术标签:
【中文标题】Android AsyncTask 重复进程半年【英文标题】:Android AsynchTask repeating process for half an our 【发布时间】:2014-09-02 03:45:48 【问题描述】:我有一个带有进度条的异步任务。我在 doInBackground() 中需要的是填充我的数据库并使用水平进度条发布它。 但它一次又一次地运行数据库填充,我不知道为什么。
请帮我修改它! 谢谢!
public class MainActivity extends Activity
Db_ReFill db_refill;
ProgressDialog progressBar;
private int progressBarStatus = 0;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
db_refill = new Db_ReFill();
progressBar = new ProgressDialog(this);
progressBar.setMessage("Várjááá!");
progressBar.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressBar.setCancelable(false);
progressBar.setProgress(0);
class dbFrissites extends AsyncTask<Void, Integer, Void>
@Override
protected void onPreExecute()
super.onPreExecute();
progressBar.show();
progressBarStatus = 0;
@Override
protected Void doInBackground(Void... params)
while (progressBarStatus < 100)
progressBarStatus++;
publishProgress(progressBarStatus);
db_refill.fill();
return null;
@Override
protected void onProgressUpdate(Integer... values)
// TODO Auto-generated method stub
super.onProgressUpdate(values);
progressBar.setProgress(values[0]);
@Override
protected void onPostExecute(Void result)
super.onPostExecute(result);
if (progressBar.isShowing())
progressBar.dismiss();
编辑:DB_Refill.class
public class Db_ReFill
private static Context context = MainActivity.context;
static DatabaseHandler db= new DatabaseHandler(context);
public static Boolean kesz = false;
public void fill()
Log.d("Insert: ", "Adatbázis szótárak feltöltése ...");
db.addAccuracyVocab(new AccuracyVocab("1"));
db.addAccuracyVocab(new AccuracyVocab("0,5"));
db.addAccuracyVocab(new AccuracyVocab("0,25"));
db.addAccuracyVocab(new AccuracyVocab("0,1"));
db.addAccuracyVocab(new AccuracyVocab("0,01"));
db.addAccuracyVocab(new AccuracyVocab("0,001"));
db.addAccuracyVocab(new AccuracyVocab("-"));
db.addEngineTypeVocab(new EngineTypeVocab("G", "Gáz"));
db.addEngineTypeVocab(new EngineTypeVocab("H", "Hibrid"));
db.addEngineTypeVocab(new EngineTypeVocab("E", "Elektromos"));
db.addEngineTypeVocab(new EngineTypeVocab("B", "Benzin"));
db.addEngineTypeVocab(new EngineTypeVocab("D", "Dízel"));
db.addEnvironmentalClassificationVocab(new EnvironmentalClassificationVocab(
"0",
"Katalizátor nélküli benzin motoros, nem minősített dízel motoros"));
db.addEnvironmentalClassificationVocab(new EnvironmentalClassificationVocab(
"1", "Katalizátoros, nem szabályozott benzin motoros"));
db.addEnvironmentalClassificationVocab(new EnvironmentalClassificationVocab(
"2", "Katalizátoros, szabályozott benzin motoros"));
db.addEnvironmentalClassificationVocab(new EnvironmentalClassificationVocab(
"3", "Dízel EURO-I"));
db.addEnvironmentalClassificationVocab(new EnvironmentalClassificationVocab(
"4", "Dízel és benzines EURO-II"));
db.addEnvironmentalClassificationVocab(new EnvironmentalClassificationVocab(
"5", "Tiszta gázüzemű vagy elektromos vagy hibrid"));
db.addEnvironmentalClassificationVocab(new EnvironmentalClassificationVocab(
"6", "Benzines EURO-III, OBD"));
db.addEnvironmentalClassificationVocab(new EnvironmentalClassificationVocab(
"7", "Dízel EURO-III"));
db.addEnvironmentalClassificationVocab(new EnvironmentalClassificationVocab(
"8", "Dízel EURO-III OBD"));
db.addEnvironmentalClassificationVocab(new EnvironmentalClassificationVocab(
"9", "Benzines EURO-IV, OBD"));
db.addEnvironmentalClassificationVocab(new EnvironmentalClassificationVocab(
"10", "Dízel EURO-IV OBD1"));
db.addEnvironmentalClassificationVocab(new EnvironmentalClassificationVocab(
"11", "Dízel EURO-IV OBD2"));
db.addEnvironmentalClassificationVocab(new EnvironmentalClassificationVocab(
"12", "Dízel EURO-V, OBD"));
db.addEnvironmentalClassificationVocab(new EnvironmentalClassificationVocab(
"13", "Dízel OBD EEV"));
db.addEnvironmentalClassificationVocab(new EnvironmentalClassificationVocab(
"14", "EURO-V"));
db.addEnvironmentalClassificationVocab(new EnvironmentalClassificationVocab(
"15", "EURO-VI"));
db.addEnvironmentalClassificationVocab(new EnvironmentalClassificationVocab(
"98", "Ismeretlen"));
db.addEnvironmentalClassificationVocab(new EnvironmentalClassificationVocab(
"99", "Nem értelmezhető"));
db.addFielddeVicevocab(new FieldDeviceVocab("EMBase"));
db.addFielddeVicevocab(new FieldDeviceVocab("PT1004"));
db.addFielddeVicevocab(new FieldDeviceVocab("PT1008"));
db.addFielddeVicevocab(new FieldDeviceVocab("Altivar 71"));
db.addFielddeVicevocab(new FieldDeviceVocab("UMI-16"));
db.addFielddeVicevocab(new FieldDeviceVocab("DIRIS A10"));
db.addFielddeVicevocab(new FieldDeviceVocab("EMPV"));
db.addFielddeVicevocab(new FieldDeviceVocab("GR"));
db.addMagnitudeVocab(new MagnitudeVocab("1000000000000"));
db.addMagnitudeVocab(new MagnitudeVocab("1000000000"));
db.addMagnitudeVocab(new MagnitudeVocab("1000000"));
db.addMagnitudeVocab(new MagnitudeVocab("1000"));
db.addMagnitudeVocab(new MagnitudeVocab("1"));
db.addMagnitudeVocab(new MagnitudeVocab("0,001"));
db.addMagnitudeVocab(new MagnitudeVocab("0,000001"));
db.addMagnitudeVocab(new MagnitudeVocab("0,000000001"));
db.addMagnitudeVocab(new MagnitudeVocab("1E-12"));
db.addMagnitudeVocab(new MagnitudeVocab("0.1"));
db.addMagnitudeVocab(new MagnitudeVocab("0.01"));
db.addMagnitudeVocab(new MagnitudeVocab("22.5"));
db.addPhysicalUnitTypeNameVocab(new PhysicalUnitTypeNameVocab("Nincs"));
db.addPhysicalUnitTypeNameVocab(new PhysicalUnitTypeNameVocab("Másodperc"));
db.addPhysicalUnitTypeNameVocab(new PhysicalUnitTypeNameVocab("Fok"));
db.addPhysicalUnitTypeNameVocab(new PhysicalUnitTypeNameVocab("Sebesség"));
db.addPhysicalUnitTypeNameVocab(new PhysicalUnitTypeNameVocab("Százalék"));
db.addPhysicalUnitTypeNameVocab(new PhysicalUnitTypeNameVocab("Hőmérséklet"));
db.addPhysicalUnitTypeNameVocab(new PhysicalUnitTypeNameVocab("Nyomás"));
db.addPhysicalUnitTypeNameVocab(new PhysicalUnitTypeNameVocab("Impulszus sebesség"));
db.addPhysicalUnitTypeNameVocab(new PhysicalUnitTypeNameVocab("Fordulatszám"));
db.addPhysicalUnitTypeNameVocab(new PhysicalUnitTypeNameVocab("Térfogat"));
db.addPhysicalUnitTypeNameVocab(new PhysicalUnitTypeNameVocab("Térfogatáram"));
db.addPhysicalUnitTypeNameVocab(new PhysicalUnitTypeNameVocab("Gyorsulás"));
db.addPhysicalUnitTypeNameVocab(new PhysicalUnitTypeNameVocab("Sugárzás"));
db.addPhysicalUnitTypeNameVocab(new PhysicalUnitTypeNameVocab("Áramerősség"));
db.addPhysicalUnitTypeNameVocab(new PhysicalUnitTypeNameVocab("Feszültség"));
db.addPhysicalUnitTypeNameVocab(new PhysicalUnitTypeNameVocab("Frekvencia"));
db.addPhysicalUnitTypeNameVocab(new PhysicalUnitTypeNameVocab("Teljesítmény"));
db.addPhysicalUnitTypeNameVocab(new PhysicalUnitTypeNameVocab("Teljesítmény tényező"));
db.addPhysicalUnitTypeNameVocab(new PhysicalUnitTypeNameVocab("Hőáram"));
db.addPhysicalUnitTypeNameVocab(new PhysicalUnitTypeNameVocab("Mágnesszelep"));
db.addPhysicalUnitTypeNameVocab(new PhysicalUnitTypeNameVocab("Motorkapcsoló"));
db.addPhysicalUnitTypeNameVocab(new PhysicalUnitTypeNameVocab("Hibaszenzor"));
db.addSensorsNameVocab(new SensorsNameVocab("GPS"));
db.addSensorsNameVocab(new SensorsNameVocab("SHT71"));
db.addSensorsNameVocab(new SensorsNameVocab("SPD015G"));
db.addSensorsNameVocab(new SensorsNameVocab("Encoder"));
db.addSensorsNameVocab(new SensorsNameVocab("PT"));
db.addSensorsNameVocab(new SensorsNameVocab("WindDir"));
db.addSensorsNameVocab(new SensorsNameVocab("WindSpeed"));
db.addSensorsNameVocab(new SensorsNameVocab("Current"));
db.addSensorsNameVocab(new SensorsNameVocab("DS1820"));
db.addSensorsNameVocab(new SensorsNameVocab("ADXL345"));
db.addSensorsNameVocab(new SensorsNameVocab("ACS712"));
db.addSensorsNameVocab(new SensorsNameVocab("DS18B20"));
db.addSensorsNameVocab(new SensorsNameVocab("PT100"));
db.addSensorsNameVocab(new SensorsNameVocab("GSD8"));
db.addSensorsNameVocab(new SensorsNameVocab("GR"));
db.addSensorsNameVocab(new SensorsNameVocab("DIRIS A10"));
db.addSensorsNameVocab(new SensorsNameVocab("TRANSMOTEC DMA-24-40-A-457-LT-POT-IP65"));
db.addSensorsNameVocab(new SensorsNameVocab("GSD5"));
db.addSensorTypeVocab(new SensorTypeVocab("UTC-HH", 0, 23));
db.addSensorTypeVocab(new SensorTypeVocab("UTC-MM", 0, 59));
db.addSensorTypeVocab(new SensorTypeVocab("UTC-SS", 0, 59));
db.addSensorTypeVocab(new SensorTypeVocab("Latitude degree", -180, 180));
db.addSensorTypeVocab(new SensorTypeVocab("Latitude dot", 0, 9999));
db.addSensorTypeVocab(new SensorTypeVocab("Position fix indicator", 0, 3));
db.addSensorTypeVocab(new SensorTypeVocab("Speed", 0, 200));
db.addSensorTypeVocab(new SensorTypeVocab("Course over ground", -360, 360));
db.addSensorTypeVocab(new SensorTypeVocab("Date_year", 2014, 2020));
db.addSensorTypeVocab(new SensorTypeVocab("Date_month", 1, 12));
db.addSensorTypeVocab(new SensorTypeVocab("Date_day", 1, 31));
db.addSensorTypeVocab(new SensorTypeVocab("Magnetic variation", -360, 360));
db.addSensorTypeVocab(new SensorTypeVocab("Mode 1", 0, 3));
db.addSensorTypeVocab(new SensorTypeVocab("Mode 2", 0, 3));
db.addSensorTypeVocab(new SensorTypeVocab("PDOP", 0, 20));
db.addSensorTypeVocab(new SensorTypeVocab("HDOP", 0, 20));
db.addSensorTypeVocab(new SensorTypeVocab("VDOP", 0, 20));
db.addSensorTypeVocab(new SensorTypeVocab("Relative humidity", 0, 100));
db.addSensorTypeVocab(new SensorTypeVocab("Temparature", -20, 120));
db.addSensorTypeVocab(new SensorTypeVocab("Air pressure (pascal Gauge)", 0, 1500));
db.addSensorTypeVocab(new SensorTypeVocab("Rotation", -200, 200));
db.addSensorTypeVocab(new SensorTypeVocab("Battery voltage", 0, 400));
db.addSensorTypeVocab(new SensorTypeVocab("Consumption", 0, 100));
db.addSensorTypeVocab(new SensorTypeVocab("Acceleration", -10, 10));
db.addSensorTypeVocab(new SensorTypeVocab("Volume", 0, 99999));
db.addSensorTypeVocab(new SensorTypeVocab("Radiation", 0, 1500));
db.addSensorTypeVocab(new SensorTypeVocab("Direction", 0, 360));
db.addSensorTypeVocab(new SensorTypeVocab("Current", -20, 50));
db.addSensorTypeVocab(new SensorTypeVocab("Voltage", 0, 500));
db.addSensorTypeVocab(new SensorTypeVocab("Frequency", 0, 65));
db.addSensorTypeVocab(new SensorTypeVocab("Power", 0, 9999));
db.addSensorTypeVocab(new SensorTypeVocab("Power efficiency", -1, 1));
db.addSensorTypeVocab(new SensorTypeVocab("Flow", 0, 9999));
db.addSensorTypeVocab(new SensorTypeVocab("Heat flow", 0, 9999));
db.addSensorTypeVocab(new SensorTypeVocab("Logic", 0, 1));
db.addUnitVocab(new UnitVocab("-"));
db.addUnitVocab(new UnitVocab("sec"));
db.addUnitVocab(new UnitVocab("min"));
db.addUnitVocab(new UnitVocab("hour"));
db.addUnitVocab(new UnitVocab("day"));
db.addUnitVocab(new UnitVocab("month"));
db.addUnitVocab(new UnitVocab("year"));
db.addUnitVocab(new UnitVocab("°"));
db.addUnitVocab(new UnitVocab("km/h"));
db.addUnitVocab(new UnitVocab("m/s"));
db.addUnitVocab(new UnitVocab("%"));
db.addUnitVocab(new UnitVocab("°C"));
db.addUnitVocab(new UnitVocab("Pa"));
db.addUnitVocab(new UnitVocab("imp/sec"));
db.addUnitVocab(new UnitVocab("1/min"));
db.addUnitVocab(new UnitVocab("m^3"));
db.addUnitVocab(new UnitVocab("m^3/h"));
db.addUnitVocab(new UnitVocab("l/h"));
db.addUnitVocab(new UnitVocab("g"));
db.addUnitVocab(new UnitVocab("l"));
db.addUnitVocab(new UnitVocab("l/min"));
db.addUnitVocab(new UnitVocab("W"));
db.addUnitVocab(new UnitVocab("A"));
db.addUnitVocab(new UnitVocab("V"));
db.addUnitVocab(new UnitVocab("W/m^2"));
db.addUnitVocab(new UnitVocab("Hz"));
db.addUnitVocab(new UnitVocab("var"));
db.addUnitVocab(new UnitVocab("VA"));
db.addUnitVocab(new UnitVocab("Logic"));
db.addVehicleCategoryVocab(new VehicleCategoryVocab("N1","Áruszállító gépkocsik legfeljebb 3,5 t össztömeggel"));
db.addVehicleCategoryVocab(new VehicleCategoryVocab("M1","Személyszállító gépkocsik legfeljebb nyolc ülőhellyel"));
db.addVehicleCategoryVocab(new VehicleCategoryVocab("M2","Személyszállító gépkocsik több mint nyolc ülőhellyel és legfeljebb 5 t össztömeggel"));
db.addVehicleCategoryVocab(new VehicleCategoryVocab("M3","Személyszállító gépkocsik több mint nyolc ülőhellyel és több mint 5 t össztömeggel"));
db.addVehicleCategoryVocab(new VehicleCategoryVocab("N2","Áruszállító gépkocsik 3,5 t - 12 t legnagyobb össztömeggel"));
db.addVehicleCategoryVocab(new VehicleCategoryVocab("N3","Áruszállító gépkocsik több mint 12 t össztömeggel"));
db.addVehicleCategoryVocab(new VehicleCategoryVocab("O1","Pótkocsik, legfeljebb 0,75 t össztömeggel"));
db.addVehicleCategoryVocab(new VehicleCategoryVocab("O2","Pótkocsik, 0,75 t - 3,5 t össztömeggel"));
db.addVehicleCategoryVocab(new VehicleCategoryVocab("O3","Pótkocsik, 3,5 t - 10 t össztömeggel"));
db.addVehicleCategoryVocab(new VehicleCategoryVocab("O4","Pótkocsik, több mint 10 t össztömeggel"));
db.addVehicleCategoryVocab(new VehicleCategoryVocab("L1E","Max. 50 cm3 belsőégésű, vagy max. 4 KW elektromos motorral szerelt kétkerekű motorkerékpár"));
db.addVehicleCategoryVocab(new VehicleCategoryVocab("L2E","Max. 50 cm3 belsőégésű, vagy max. 4 KW elektromos motorral szerelt háromkerekű motorkerékpár"));
db.addVehicleCategoryVocab(new VehicleCategoryVocab("L3E","Motorkerékpárok, melyek 45 km/óra sebességnél nagyobb sebességűek, és 50 cm3-nél nagyobb hengerűrtartalmú belsőégésű motorral vannak ellátva"));
db.addVehicleCategoryVocab(new VehicleCategoryVocab("L4E","45 km/óra sebességnél nagyobb sebességű, 50 cm3-nél nagyobb hengerűrtartalmú belsőégésű motorral ellátott oldalkocsis járművek"));
db.addVehicleCategoryVocab(new VehicleCategoryVocab("L5E","Háromkerekű járművek (triciklik), 50 cm3-nél nagyobb belsőégésű motorral vannak ellátva, és/vagy a tervezési sebességük nagyobb, mint 45 km/óra"));
db.addVehicleCategoryVocab(new VehicleCategoryVocab("L6E","Könnyű négykerekű járművek, amelyek saját tömege legfeljebb 350 kg, sebességük max. 45. km/óra, amelyek motorjának hengerűrtartalma max. 50 cm3"));
db.addVehicleCategoryVocab(new VehicleCategoryVocab("L7E","Egyéb, az L6e kategóriákban fel nem soroltakon kívüli négykerekű járművek, amelyek saját tömege legfeljebb 400 kg"));
【问题讨论】:
db_refill.fill() 在哪里? 这是另一个类的方法 你没有执行异步任务!如果是这样,请添加代码调用。 为什么你在 while (progressBarStatus db_refill.execute() 在哪里? 【参考方案1】:尝试进度对话框的风格
ProgressDialog mProgress = new ProgressDialog(UR_CONTEXT);
mProgress.setMessage("UR_MESSAGE");
mProgress.setProgressStyle(ProgressDialog.STYLE_SPINNER);
mProgress.setCancelable(false);
mProgress.show();
【讨论】:
谢谢你,我有过这样的经历,但我想“告诉”用户他需要等待多长时间 :) @David:鉴于您的数据库填充方法的当前结构,您根本做不到。【参考方案2】:您在 while 循环中调用 db_refill.fill(),这将继续填充您的数据库,直到进度超过 100。这可能不是您的意图。
建议使用伪代码进行更正
@Override
protected Void doInBackground(Void... params)
db_refill.fill();
while (progressBarStatus < 100)
progressBarStatus = db_refill.getStatus();
publishProgress(progressBarStatus);
return null;
【讨论】:
如果我在循环之外调用它而不是进度条以 100 开头并且永远不会改变 我不确定到底要完成什么,因为很难遵循。我假设您可能想在一个线程上填充数据库,然后等待数据库填充,同时在数据库上取得进展。在这种情况下,您可能需要在循环之前调用 fill,然后在循环中使用 check 方法更新进度条。 如果我在循环之前调用它,它位于 0 并且当它的就绪跳转到 100 并消失时 通过您的编辑,我收到此错误消息:方法 getStatus() 未定义 Db_ReFill 类型 @David on progressUpdate() 用于您知道完成任务所需的时间...例如下载文件...在其中您知道文件的完整文件大小...所以我建议删除进度对话框 STYLE_HORIZONTAL以上是关于Android AsyncTask 重复进程半年的主要内容,如果未能解决你的问题,请参考以下文章