Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 无法找出处理程序线程不工作的原因_Android_Multithreading_Handler_Runnable - Fatal编程技术网

Android 无法找出处理程序线程不工作的原因

Android 无法找出处理程序线程不工作的原因,android,multithreading,handler,runnable,Android,Multithreading,Handler,Runnable,我在学习处理程序线程时遇到了一个问题。它不起作用了。我用postDelayed给出了3秒的延迟,也使用了postAtTime,但现在没有一个可用。运行选项卡中也没有EEOR或异常 下面是java代码 package com.example.ims; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.view.View; import android.widg

我在学习处理程序线程时遇到了一个问题。它不起作用了。我用postDelayed给出了3秒的延迟,也使用了postAtTime,但现在没有一个可用。运行选项卡中也没有EEOR或异常

下面是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秒后显示progressbar,但它没有显示

我已经浏览了这些链接,但没有一个对我有帮助

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

要使用postDelayed(),必须执行以下操作:

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

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

posttime()doc关于它的第二个参数:


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

它正在工作。但是,邮递时间有什么问题?我想弄明白。使用SystemClock.uptimeMillis()代替System.currentTimeMillis()。可以。是的,它现在可以与SystemClock.uptimeMillis()一起工作。谢谢,不客气。我正在编辑我的答案。