在 Android 上多次运行同一线程

时间:2021-02-12 13:14:10

标签: android multithreading

一直以来,我相信一旦一个线程完成执行,即它的 run 方法完成,它就不能再次启动。

我正在关注 this 教程,他创建了一个新的 Thread 类来演示线程的概念。他运行一个 for 循环,在线程中睡了一秒钟,并在循环的每次迭代中发布一条日志消息。他在单击按钮时启动了线程,一旦线程完成,他尝试再次启动线程,但它崩溃了,这似乎验证了一旦线程死了,它们就无法重新启动

但我的 Android 设备并非如此。我使用 AIDE(Google 商店中的付费 IDE)进行编程(如果这很重要),并编写了与上述相同的代码。令我惊讶的是,即使完成,该线程也会在单击按钮时一遍又一遍地开始。

我在模拟器上运行相同的应用程序,但在尝试启动死线程时它崩溃了,那么我哪里出错了??我没有其他物理设备来测试这一点。我只是糊涂了!

编辑 代码:

//The thread class
public class ExampleLooperThread extends Thread
{
    private static String TAG = "ExampleLooperThread";
    
    @Override
    public void run()
    {
        for(int i = 0; i<5; i++){
            Log.d(TAG,"run: "+i);
            SystemClock.sleep(1000);
        }
        Log.d(TAG,"End of run()");
        
    }
    
}

下面是我的活动代码

public class MainActivity extends Activity {

    ExampleLooperThread looperThread = new ExampleLooperThread();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void startThread(View view){
        looperThread.start();
    }
    
}

编辑:我只能在我的物理设备上重新创建它。多次按下 startThread 按钮,我的 logcat 看起来像

2021-02-12 17:41:01.481 26705-28063/com.codewithmab.myapplication D/ExampleLooperThread: Run 0
2021-02-12 17:41:02.255 26705-28064/com.codewithmab.myapplication D/ExampleLooperThread: Run 0
2021-02-12 17:41:02.482 26705-28063/com.codewithmab.myapplication D/ExampleLooperThread: Run 1
2021-02-12 17:41:03.255 26705-28064/com.codewithmab.myapplication D/ExampleLooperThread: Run 1
2021-02-12 17:41:03.482 26705-28063/com.codewithmab.myapplication D/ExampleLooperThread: Run 2
2021-02-12 17:41:04.256 26705-28064/com.codewithmab.myapplication D/ExampleLooperThread: Run 2
2021-02-12 17:41:04.483 26705-28063/com.codewithmab.myapplication D/ExampleLooperThread: Run 3
2021-02-12 17:41:05.256 26705-28064/com.codewithmab.myapplication D/ExampleLooperThread: Run 3
2021-02-12 17:41:05.483 26705-28063/com.codewithmab.myapplication D/ExampleLooperThread: Run 4
2021-02-12 17:41:06.257 26705-28064/com.codewithmab.myapplication D/ExampleLooperThread: Run 4
2021-02-12 17:41:06.483 26705-28063/com.codewithmab.myapplication D/ExampleLooperThread: End of run
2021-02-12 17:41:07.257 26705-28064/com.codewithmab.myapplication D/ExampleLooperThread: End of run

我的设备是否创建了不同的线程?为什么会出现这种奇怪的结果?

好的我修改了run()末尾的Log来查看每个线程的Id

Log.d(TAG ,"End of run <- "+getId());

另一个震惊,因为它再次重新启动相同的 ID

0 个答案:

没有答案