android - 在线程上启动 Activity

标签 android eclipse

我有一个Splash Activity。当 progressStatus 达到最大值时,我想开始一个新的 Activity 。我的问题是我不知道在哪里可以找到开始 Intent 。我的 IF 语句 有错误。

    new Thread(new Runnable() {
        public void run() {
                while (progressStatus < 100) {
                progressStatus += 5;

                }   
                if (progressStatus == progressBar.getMax()) {
                        Intent intent = new Intent(".MENU");
                        startActivity(intent);
                    }
                // Update the progress bar and display the
                // current value in the text view
                handler.post(new Runnable() {
                    public void run() {
                        progressBar.setProgress(progressStatus);
                        textView.setText(progressStatus + "/"
                                + progressBar.getMax());
                    }
                });

                try {
                    // Sleep for 200 milliseconds.
                    // Just to display the progress slowly

                    Thread.sleep(200);

                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }

    }).start();

在我的 list 上:

<activity
android:name="NewMainActivity"
android:label="@string/app_name"
android:screenOrientation="portrait">
<intent-filter>
       <category android:name="android.intent.category.DEFAULT" />
       <action android:name=".MENU" />
</intent-filter>
</activity>

我的 Splash Activity 是 MainActivity Class 然后 NewMainActivity Class 是第二个 Activity 。

最佳答案

您必须从 UI 线程调用 startActivity(intent)。您可以像下面这样创建一个新方法:

public void startActivityFromMainThread(){

   Handler handler = new Handler(Looper.getMainLooper());
   handler.post(new Runnable() {
   @Override
      public void run() {
          Intent intent = new Intent (MainActivity.this, NewMainActivity.class);
          startActivity(intent);
      }
   });
}

Looper.getMainLooper() 验证这将在主线程上执行。

那么您的代码将如下所示:

  new Thread(new Runnable() {
    public void run() {
            progressBar.setMax(100);
            progressStatus = 0;

            while (progressStatus < 100) {
               progressStatus += 5;            

               // Update the progress bar and display the
               // current value in the text view
               handler.post(new Runnable() {
                  @Override
                  public void run() {
                      progressBar.setProgress(progressStatus);
                      textView.setText(progressStatus + "/"
                              + progressBar.getMax());
                  }
               });


             try {
                 // Sleep for 200 milliseconds.
                 // Just to display the progress slowly

                 Thread.sleep(200);

              } catch (InterruptedException e) {
                  e.printStackTrace();
              }
           }
           startActivityFromMainThread();
        }

}).start();

关于android - 在线程上启动 Activity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28089803/

相关文章:

android - 如何取消应用程序与 Admob 的关联

android - Gradle:创建一个将参数作为命令行传递的任务

尽管是 Collections.unmodifiableList(),但 Java List 从某处被修改

java - 在 Android Maven 项目中使用纯 Java 库

java - 你如何在 Windows 上 merge GIT?

java - Eclipse:exec.args 中的 Maven 多参数字符串

java - Android心率监测代码解释

android - 奇怪的 LogCat 错误

android:state_pressed 不工作

java - 清除表并重置自增主键