无法弄清楚为什么处理程序线程不工作

Cannot figure out why handler thread is not working

我在学习处理程序线程时遇到了问题。它不工作。我用 postDelayed 延迟了 3 秒,还使用了 postAtTime,但 none 现在正在工作。 运行 选项卡中也没有错误或异常。

这是 java 代码。

package com.example.ims;

import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.view.View;
import android.widget.ProgressBar;

import androidx.appcompat.app.AppCompatActivity;

public class SplashScreen extends AppCompatActivity {


    ProgressBar progressBar;


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

        
        int interval = 3000;
        new Handler(Looper.getMainLooper()).postAtTime(new Runnable(){
            @Override
            public void run() {
                progressBar.setVisibility(View.VISIBLE);
            }
        },System.currentTimeMillis()+ interval);
    }

    void init()
    {
        progressBar = findViewById(R.id.progressbar);
        progressBar.setVisibility(View.GONE);
    }

    @Override
    protected void onStart() {
        super.onStart();


    }
}

此代码应在 3 秒后显示进度条,但它没有显示。

我浏览了这些链接,但是 none 帮助了我

Android threading and Handler not working

Handler Timer is not working

我也访问了其他一些链接。但是,显然所有人都认为处理程序线程应该在 onCreate() 方法中,但我的已经在 onCreate 方法中了。

要使用 postDelayed(),您必须这样做:

int interval = 3000;
    new Handler(Looper.getMainLooper()).postDelayed(new Runnable(){
        @Override
        public void run() {
            progressBar.setVisibility(View.VISIBLE);
        }
    },interval);

但要使用 postAtTime(),您必须使用 SystemClock.uptimeMillis() 而不是 System.currentTimeMillis()。因为 postAtTime() 的第二个参数得到的是正常运行时间毫秒而不是当前时间毫秒。

postAtTime() 文档说第二个参数:

“回调的绝对时间 运行,使用 {@link android.os.SystemClock#uptimeMillis} 时基”