第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

當(dāng)我按下在片段中激活異步任務(wù)的按鈕時(shí),應(yīng)用程序停止工作

當(dāng)我按下在片段中激活異步任務(wù)的按鈕時(shí),應(yīng)用程序停止工作

Smart貓小萌 2022-05-12 16:06:29
我在我的應(yīng)用程序中打開一個(gè)新片段,我想計(jì)算價(jià)格并每秒打印一次(通過 asyncTask),但是當(dāng)我運(yùn)行應(yīng)用程序時(shí)停止工作。你能幫我找出問題嗎?public class RandomDrive extends Fragment {private Chronometer chronometer;private Button start;private Button stop;private TextView price;@Nullable@Overridepublic View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {    View v = inflater.inflate(R.layout.fragment_random_drive, container, false);    chronometer = (Chronometer) v.findViewById(R.id.chronometer);    price = v.findViewById(R.id.see_price);    class SyncTaskCounter extends AsyncTask<Void, Void, Void> {        @Override        protected Void doInBackground(Void... voids) {            double price = 0;            while (!isCancelled()) {                price = price + 0.05;                try {                    Thread.sleep(1000);                } catch (InterruptedException e) {                    e.printStackTrace();                }                printPrice(price);            }            return null;        }        @Override        protected void onCancelled() {            super.onCancelled();        }    }    final SyncTaskCounter asyncTaskCount;    asyncTaskCount = new SyncTaskCounter();    start = (Button) v.findViewById(R.id.start);    start.setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View view) {            chronometer.setBase(SystemClock.elapsedRealtime());            chronometer.start();            asyncTaskCount.execute();        }    });    stop = (Button) v.findViewById(R.id.stop);    stop.setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View view) {            chronometer.stop();            asyncTaskCount.cancel(true);        }    });    return v;}public void printPrice(double price1) {    price.setText("the price is: " + price1 + " shekel");}}問題出在 asyncTask 中,因?yàn)楫?dāng)我在沒有 asyncTask 的情況下運(yùn)行該函數(shù)并僅在最后計(jì)算價(jià)格時(shí) - 應(yīng)用程序運(yùn)行。
查看完整描述

1 回答

?
繁星coding

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超4個(gè)贊

在 Android 上,您必須在 UI 線程上運(yùn)行所有 UI 代碼。AsyncTask 中的代碼在其他線程中執(zhí)行,因此它不能調(diào)用 UI 方法。


為此,您應(yīng)該使用 Handler(代碼將在 UI 線程中調(diào)用): https ://developer.android.com/reference/android/os/Handler


final Handler h=new Handler();

h.postDelayed(new Runnable() {

   public void run() {

      printPrice(price);

      price = price + 0.05;

      h.postDelayed(this, 1000); // call for next update

   }

}, 1000);

我你必須使用 AsyncTask,那么你應(yīng)該從方法更新 UI:onProgressUpdate https://developer.android.com/reference/android/os/AsyncTask


class SyncTaskCounter extends AsyncTask<Void, Double, Void> {

        @Override

        protected Void doInBackground(Void... voids) {

            double price = 0;


            while (!isCancelled()) {

                price = price + 0.05;

                try {

                    Thread.sleep(1000);

                } catch (InterruptedException e) {

                    e.printStackTrace();

                }

                publishProgress(price); // this instructs to call onProgressUpdate from UI thread.

            }

            return null;

        }

        @Override

        protected void onProgressUpdate(Double... price) {

                printPrice(price[0]);  // this is called on UI thread

        }


        @Override

        protected void onCancelled() {

            super.onCancelled();

        }

    }


查看完整回答
反對 回復(fù) 2022-05-12
  • 1 回答
  • 0 關(guān)注
  • 139 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號