如何等待 10 秒而不锁定 android 中的应用程序 UI [重复]

Posted

技术标签:

【中文标题】如何等待 10 秒而不锁定 android 中的应用程序 UI [重复]【英文标题】:How can I wait for 10 second without locking application UI in android [duplicate] 【发布时间】:2013-06-18 16:56:12 【问题描述】:

我遇到了一个问题,我想等待 10 秒,因为我希望我的应用程序在 10 秒后启动下面的代码,但不阻止该人点击应用程序中的任何其他内容(没有 打电话给Thread.sleep();)。

try 
    Log.v("msg", "WAIT CheckFrequencyRun");
    Thread.sleep(10000); // giving time to connect to wifi
    
    catch (InterruptedException e) 
    // TODO Auto-generated catch block
    e.printStackTrace();
   
   //if no network
   if(wifiManager.getConnectionInfo().getNetworkId()==-1)
    //stop wifi
    wifiManager.setWifiEnabled(false);
    Log.v("msg", "no connection");
    handler.postDelayed(this, checkInterval);
   
   //else connection
   else
    Log.v("msg", "connection");
    onDestroy();
   

【问题讨论】:

看看这些问题,它们看起来很相似:-***.com/questions/4111905/…-***.com/questions/9630681/…-***.com/questions/9640880/…-***.com/questions/13765034/wait-a-time-android?rq=1 postDelayed 不会锁定您的 Ui,但 Thread.Sleep 会。删除 Thread.Sleep 并在 Runnable 中继续您的工作 【参考方案1】:

你可以用这个:

Handler handler = new Handler();
handler.postDelayed(new Runnable() 
    public void run() 
     // Actions to do after 10 seconds
    
, 10000);

对于停止处理程序,您可以尝试以下操作: handler.removeCallbacksAndMessages(null);

【讨论】:

简单,无需任何额外努力即可工作。我需要一些简洁的东西,它就像一个魅力 美女!!!像魅力一样工作。谢谢!【参考方案2】:

你永远不想在UI 线程上调用thread.sleep(),因为听起来你已经想通了。这会冻结UI 并且总是一件坏事。您可以使用单独的ThreadpostDelayed

This SO answer 展示了如何做到这一点以及其他几个选项

Handler

TimerTask

您可以查看这些,看看哪些最适合您的特定情况

【讨论】:

【参考方案3】:

1带有处理程序:

handler.sendEmptyMessageDelayed(1, 10000);


private Handler handler = new Handler() 
    @Override
    public void handleMessage(Message msg) 
        if (msg.what == 1) 
           //your code
        
    
;

【讨论】:

什么是“TRIGGER”,因为 android 文档要求一个 int 不能放字符串 我错了...这是您的消息 ID。试试 1【参考方案4】:

在新线程上执行此操作(将其与主线程分开)

 new Thread(new Runnable() 
     @Override
     public void run() 
        // TODO Auto-generated method stub
     
).run();

【讨论】:

以上是关于如何等待 10 秒而不锁定 android 中的应用程序 UI [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 postgres 中使用“更新跳过锁定”而不锁定查询中使用的所有表中的行?

循环通过 PL/PGSQL 中的 CURSOR 而不锁定表

仅在复制/粘贴时锁定文件,而不是在剪切/粘贴时锁定

HttpClient.GetAsync 一次只执行 2 个请求?

如何在 Spring Security 中阻止 LDAP 用户帐户而不锁定 LDAP 用户?

Android BLE write Characteristic 锁定 onCharacteristicWrite/onCharacteristicChange