为什么我的延迟不会发生?

时间:2015-03-16 13:50:46

标签: 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();
            }
        }
    });
}

2 个答案:

答案 0 :(得分:2)

用这个替换你的手柄,把你想要的所有东西都放进去。

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

答案 1 :(得分:0)

您正在等待另一个线程(因此处理程序中的run()方法):)尝试删除整个处理程序魔术并直接调用Thread.sleep。