如何从android中的线程类启动一个活动?

San*_*ndo 9 multithreading android android-activity

我正在扩展一个线程类,从那个类我想开始一个活动.这该怎么做?

Ale*_*ood 13

您需要调用startActivity()应用程序的主线程.一种方法是通过执行以下操作:

  1. 初始化a Handler并将其与应用程序的主线程关联.

    Handler handler = new Handler(Looper.getMainLooper());
    
    Run Code Online (Sandbox Code Playgroud)
  2. 包装将启动Activity内部匿名Runnable类的代码并将其传递给Handler#post(Runnable)方法.

    handler.post(new Runnable() {
        @Override
        public void run() {
            Intent intent = new Intent (MyActivity.this, NextActivity.class);
            startActivity(intent);
        }
    });
    
    Run Code Online (Sandbox Code Playgroud)

  • @AndroidDev呃......什么?此答案正确描述了如何从后台线程启动活动.`MyActivity.this`只是对当前活动上下文的引用(如果你愿意,可以将它改为`MyActivity.this.getApplicationContext()`,但这并不重要).这里要理解的主要是你不能从后台线程调用`startActivity()`方法,因为它可能会导致奇怪的竞争条件.相反,您需要将runnable发布到主线程的消息队列以在主线程上执行.那有意义吗? (4认同)

Sit*_*ten 0

好吧,开始一个班级的活动,按照我的说法,一个班级应该随着活动而延伸。

但是,如果您想使用某些线程函数启动活动,您可以执行以下操作。

使用implements Runnable 代替extends Thread。在某个具有 Activity 的类之后,您只需调用启动线程并放置您的逻辑和启动 Intent。

我认为这对您来说是一个很好的解决方案。