在Android中5秒后执行功能

Jis*_*had 27 java android timer

我是Android开发的新手,现在我的启动器活动只显示5秒,之后我想检查用户是否已登录或未执行操作并执行操作.

这是我的代码.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    exactPreferences = getSharedPreferences("ExactPreference",MODE_PRIVATE);
    setContentView(R.layout.activity_landing_page);

    session = exactPreferences.getString(Model.getSingleton().SHARED_SESSION_ID,null);
    Log.i("Session Id",session);
        displayData(); // I want to perform this function after 5 seconds.
}


private void displayData() {
    if(session.equals("")){
        Intent loginIntent = new Intent(LandingPage.this,
                LoginActivity.class);
        startActivity(loginIntent);
        Log.i("User Logged In", "False");
    }
    else
    {
        Intent objIntent = new Intent(LandingPage.this,
                IndexPageActivity.class);
        startActivity(objIntent);
        Log.i("User Logged In", "True");
    }

}
Run Code Online (Sandbox Code Playgroud)

Kar*_*eek 82

您可以使用处理程序添加一些延迟.调用以下方法displayData(),以便在5秒后执行.

new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
          displayData();
        }
    }, 5000);
Run Code Online (Sandbox Code Playgroud)

注意:不要使用线程, Thread.sleep(5000);因为它会阻止您的UI并使其无响应.


小智 7

由于 Handler 现已被弃用,因此请使用以下代码:

 new Handler(Looper.myLooper()).postDelayed(new Runnable() {
     @Override
     public void run() {
         //do what you want 
     }
 }, 5000);
Run Code Online (Sandbox Code Playgroud)


mus*_*hid 6

使用您希望导致延迟的毫秒数分配millisDelayTime变量。mActivityActivity 的一个对象,用于提供应用程序上下文。在您的情况下,millisDelayTime应初始化为 5000

mActivity.runOnUiThread(new Runnable() {
@Override
    public void run() {
    final Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
       @Override
       public void run() {
             //your code here
       }
    }, millisDelayTime);
  }
});
Run Code Online (Sandbox Code Playgroud)


Fan*_*mas 5

使用倒数计时器

// There's a TextView txtCount in Main Activity

final int secs = 5;
new CountDownTimer((secs +1) * 1000, 1000) // Wait 5 secs, tick every 1 sec
{
    @Override
    public final void onTick(final long millisUntilFinished)
    {
        txtCount.setText("" + (int) (millisUntilFinished * .001f));
    }
    @Override
    public final void onFinish()
    {
        txtCount.setText("GO!");
        finish();
        // Time's up - Start the Login Activity
        final Intent tnt =
            new Intent(getApplicationContext(), LoginActivity.class);
        startActivity(tnt);
    }
}.start();
Run Code Online (Sandbox Code Playgroud)