java - 为什么我的延迟没有发生?

标签 java android handler delay

目前正在开发一个应用程序,我需要进行多次 wifi 测量,取这些测量值的平均值并存储平均值。但是我发现我必须在测量之间实现延迟,否则没有足够的时间来查看测量之间的任何变化。

在 Handler.postDelayed() 方法中,我尝试实现 2000ms 的延迟,但是当我查看 TAKEWIFI 生成的日志的时间戳时,似乎根本没有延迟。

任何帮助将不胜感激:)

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_takewifi);
    final String[] strArr = new String[60];
    for (int i=0;i<60;i++)
    {
        strArr[i] = "EMPTY";
    }
    WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
    final int state = wifi.getWifiState();
    if(state == WifiManager.WIFI_STATE_ENABLED) {
        RawData rD = new RawData();
        Toast.makeText(TakeWifi.this, 
                "Taking RSS measurement, hold still!", 
                 Toast.LENGTH_SHORT).show();
        for(int a=0;a<30;a++)
        {
            wifi.startScan();
            final Handler handler = new Handler();
            handler.post(new Runnable() {
                @Override
                public void run() {
                    handler.postDelayed(this, 2000);
                }
            });
            List<ScanResult> results = wifi.getScanResults();
            String index = (String) results.toString();
            int forCount = 0;
            int ifCount = 0;
            for (String retval: index.split(",")){
                if (((forCount%5==1)||(forCount%5==3))&&(ifCount<60)){
                    strArr[ifCount] = retval;
                    strArr[ifCount] = strArr[ifCount].replace(" BSSID:", "BSSID:");
                    strArr[ifCount] = strArr[ifCount].replace(" level:", "level:");
                    ifCount++;
                }
                forCount++;
            }
            for(int check=0;check<60;check++)
            {
                Log.d("TAKEWIFI","strArr[" + check + "]: " + strArr[check]);
            }
            rD.setStrArr(strArr,rD);
        }
        final String[] temp = rD.getStrArr(rD);
        for(int b=0;b<20;b++)
        {
            strArr[b]=temp[b];
        }
        for(int i=0;i<20;i++)
        {Log.d("STRARR",strArr[i]);}
        List<String> stringList = Arrays.asList(temp);
        for (int i = 0; i < 20; i++) {
            Log.d("STRLIST",stringList.get(i));
        }
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
        android.R.layout.simple_list_item_1, stringList);
        ListView listview = (ListView) findViewById(R.id.listview);
        if (listview==null)
        {
        Log.d("LISTVIEW","NULL");
        }listview.setAdapter(adapter);
        Toast.makeText(TakeWifi.this,"RSS measurement complete",Toast.LENGTH_SHORT).show();
    } else {
        Toast.makeText(TakeWifi.this,"Wifi Not Enabled",Toast.LENGTH_SHORT).show();
    }
    final Button commitBut=(Button)findViewById(R.id.button4);
    commitBut.setOnClickListener(new View.OnClickListener() {
        @Override     
        public void onClick(View arg0) {
            if(state == WifiManager.WIFI_STATE_ENABLED){
            commit(strArr);
            }
            else
            {
                Toast.makeText(TakeWifi.this,"Wifi Not Enabled",Toast.LENGTH_SHORT).show();
            }
        }
    });
}

最佳答案

用这个替换你的句柄,并将你想要延迟的所有内容放入其中。

    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            // Everything you want to be delayed needs to go inside this runnable
        }
    }, 2000);

关于java - 为什么我的延迟没有发生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29078495/

相关文章:

javascript - Spring Websocket 与 Kafka 集成

java - 它的正确答案是 22。但我得到 24。我哪里错了?我最后评估赋值运算符 += 因为它具有最低的优先级

android - 即使有公共(public)隐私,Facebook 帖子也不可见

java - Java 中的事件监听器和处理程序有什么区别?

java - 处理程序、可运行和服务 : I put everything together and it doesn't really work

java - 具有相同类名(不同包)的两个 Spring 服务 Bean 即使使用限定符也会抛出错误

java - 如何在使用 post() 之前查看使用对象构造的 JSON 对象

java - 安卓 Activity 导航

java - Android Studio 显示不可读语言

C++ 异常处理程序问题