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 重复进程半年的主要内容,如果未能解决你的问题,请参考以下文章

从Android中的AsyncTask返回一个值[重复]

Android AsyncTask 示例及说明 [重复]

android asynctask向ui发送回调[重复]

Android多线程编程之AsyncTask

从Android中的AsyncTask返回一个值[重复]

如何在android的Asynctask中显示json响应[重复]