如何模拟asynctask在android中显示加载对话框?

dzjeubhm  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(240)

我在这里看到了一些类似问题的答案,但它们对我不起作用。
我想做的是启动一个线程并在其中运行一些代码,但是在启动线程之前,我想显示一个加载对话框,一旦线程运行完毕,就关闭加载对话框。
比如说:

LoadingDialog dialog = new LoadingDialog(MainActivity.this);

class MyThread {
    ...
    void send() {
        dialog.displayDialog();

        // DO THINGS HERE
        new Thread((Runnable) () -> {
            try{
                ...
            } catch (...) {
            }
        }).start();

        // Close the dialog with dialog.closeDialog();
    }
}

( displayDialog() 以及 closeDialog() 只是我在loadingdialog类中创建的用于启动和关闭对话框的方法)
我不知道该怎么做,我在这个网站上看到了handler的一些用法,但它们都不一样,对我不起作用,所以我有点卡住了。
谢谢

osh3o9ms

osh3o9ms1#

解决方案

public class MainActivity extends AppCompatActivity {

    LoadingDialog dialog;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        dialog = new LoadingDialog(MainActivity.this);

        MyThread myThread = new MyThread(MainActivity.this);
        myThread.start();
    }

    static class MyThread extends Thread {

        private WeakReference<MainActivity> activityRef;

        public MyThread(MainActivity activity) {
            activityRef = new WeakReference<>(activity);
        }

        @Override
        public void run() {
            send();
        }

        void send() {
            // Display dialog
            if (getActivity() != null) {
                getActivity().dialog.displayDialog();
            }

            // DO THINGS HERE
            // TODO: Write your code that execute in a background here

            // Close dialog
            if (getActivity() != null) {
                getActivity().dialog.closeDialog();
            }
        }

        private MainActivity getActivity() {
            return activityRef.get();
        }
    }
}

相关问题