Java 从线程开始一个活动

Java 从线程开始一个活动,java,android,multithreading,Java,Android,Multithreading,我有一个生成pdf文件的类。 这个类由活动扩展,这意味着它有onCreate、onPause(等等)方法 当一个pdf文件正在生成时,它需要一些时间来生成,所以我需要显示一个进度条来通知用户该文件正在生成 一切都很好,当我点击generate按钮时,进度条会冻结几秒钟(根据Logcat:文件生成时进度条冻结) 所以我的问题是,我不知道如何在文件生成时使进度条不可阻挡 下面是我的代码: Log.i(TAG, "PDF generation: " + position); final Progre

我有一个生成pdf文件的类。 这个类由活动扩展,这意味着它有onCreate、onPause(等等)方法

当一个pdf文件正在生成时,它需要一些时间来生成,所以我需要显示一个进度条来通知用户该文件正在生成

一切都很好,当我点击generate按钮时,进度条会冻结几秒钟(根据Logcat:文件生成时进度条冻结)

所以我的问题是,我不知道如何在文件生成时使进度条不可阻挡

下面是我的代码:

Log.i(TAG, "PDF generation: " + position);

final ProgressDialog dialog = new ProgressDialog(this);
dialog.setCancelable(true);
dialog.setIndeterminate(true);
dialog.setMessage("Generating...");
dialog.show();

new Thread(new Runnable() {

    @Override
    public void run() {

        startActivity(new Intent(getApplicationContext(),
            PdfGenerator.class));

        runOnUiThread(new Runnable() {

            @Override
            public void run() {
                dialog.hide();
            }
        });

    }

}).start();

将代码更改为使用runOnUiThread从线程启动活动:

///... your code here..

    new Thread(new Runnable() {

        @Override
        public void run() {

            Your_Current_Activity.this.runOnUiThread(new Runnable() {

                @Override
                public void run() {

                dialog.cancel();

                // START ACTIVITY HERE
               Your_Current_Activity.this.startActivity(new 
                        Intent(Your_Current_Activity.this,
                                       PdfGenerator.class));

                }
            });

        }

    }).start();

现在看起来不错,但我做了一些改变。我已将dialog.hide()更改为dialog.cancel(),并在启动新活动后移动。无论如何谢谢你@juliuks:但是,
runOnUiThread
是活动类的方法,如果不使用活动上下文,就不可能访问它。最受欢迎的朋友:)我想你不明白我做了什么更改。顺便说一句,代码现在看起来像:@juliuks:是的,你做得对。记住一点
Stats。当你想访问
runOnUiThread