Android: behin eta berriz errepikatzeko programatuta dagoen TimerTask behin betikoa

Ados oso arazo bitxia da. , eta ziur nago nonbait nahasten ari naizela, baina ezin dut asmatu nora.

Saiatzen ari naizena da -

  • Antolatu Tenporizadorea exekutatzeko ] TimerTask bost segundoz behin
  • TimerTask -k, aldi berean, AsyncTask exekutatzen du (kasu honetan bakunak lo egiten du segundo batez AsyncTasks kopuruaren zenbaki estatikoa itzuli aurretik
  • Azkenean, lehen aipatutakoa aipatutako kontua UI-n eguneratzen da.

Eta noski, egokiak diren Handler s eta Runnable s-k beste hari batzuetako mezu asinkronoak UI-ra argitaratzeko erabili dira. ] Kode hau behin bakarrik exekutatzen da. 5 segundoz behin tiro egitea espero dut. Hemen dago kodea.

Oharra: Ez nekien zer egin Looperarekin .

public class TimerAsyncMixActivity extends Activity {
    public static final String TAG = "TimerAsyncMix";
    static int executionCount = 0;
    Handler mHandler = new Handler();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        new Timer().schedule(new MyTimerTask(this), 0, 5000);
    }

    class MyAsyncTask extends AsyncTask<String, Void, Integer>{
        @Override
        protected Integer doInBackground(String... params) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return ++executionCount;
        }

        @Override
        protected void onPostExecute(Integer result) {

            mHandler.post(new UpdateUiThread(TimerAsyncMixActivity.this, result));
            super.onPostExecute(result);
        }
    }
}



class MyTimerTask extends TimerTask{
    private TimerAsyncMixActivity tma;

    public MyTimerTask(TimerAsyncMixActivity tma) {
        this.tma = tma;
    }

    @Override
    public void run() {
        Looper.prepare();
        Log.d(TimerAsyncMixActivity.TAG, "Timer task fired");
        tma.new MyAsyncTask().execute();
        Looper.loop();
        Looper.myLooper().quit();
    }
}

class UpdateUiThread implements Runnable{

    int displayCount;
    TimerAsyncMixActivity tma;
    public UpdateUiThread(TimerAsyncMixActivity tma, int i) {
        this.displayCount = i;
        this.tma = tma;
    }

    @Override
    public void run() {
        TextView tv = (TextView) tma.findViewById(R.id.tvDisplay);
        tv.setText("Execution count is : "+displayCount);
    }

Norbaitek adierazi al dezake gaizki egiten ari naizena?

5
задан curioustechizen 11 July 2011 в 15:16
поделиться