在 Android 应用程序中使用 wait() 函数

Using wait() function in Android App

我正在尝试通过模拟来模拟不断变化的 GPS 位置。我试图每秒手动更改 gps 变量。我尝试了各种方法,但它们都不适合我。也许有人会在我的代码中发现错误?大多数时候屏幕只是一片空白,activity 甚至没有加载。

import android.os.Bundle;
import android.os.Handler;
import android.os.SystemClock;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import java.util.Timer;
import java.util.TimerTask;

/**
 * Created by Larry on 18/12/2015.
 */
public class travel extends AppCompatActivity {
    float gps = 0;

    Handler handler = new Handler();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.travel_layout2);
        String[] words = getResources().getStringArray(R.array.information);
        String[] left = getResources().getStringArray(R.array.left);
        String[] right = getResources().getStringArray(R.array.right);
        String[] bubble = getResources().getStringArray(R.array.bubble);
        Spinner spinner1 = (Spinner) findViewById(R.id.beginning);
        Global app = Global.getInstance();
        String beginning=app.getValue(0);
        String ending=app.getValue(1);
        int begin = 1;
        int end = 1;
        int resId;
        int y=0;
        float latBegin=0;
        float latEnd=0;
        float lonBegin=0;
        float lonEnd=0;
        String name;
        TextView test;
        ImageView image;
        RelativeLayout layout;


        // deleted some code which initializes the page

        gps = latBegin;
        while (gps < latEnd) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            gps = gps + 0.001f;
            //Handler h = new Handler();

            // h.postDelayed(new Runnable() {

            //   @Override
            //   public void run() {
            // DO DELAYED STUFF
            //}, 1000);


            //SystemClock.sleep(1000);




            // Thread.sleep(1000);


            // Handler handler = new Handler();
            //handler.postDelayed(new Runnable() {
            //public void run() { }, 500);
            //});
            //setTimeout(onCreate(){ },1000);
        }
    }
}

您看到空白屏幕是因为您在 UI 线程上执行耗时操作。您可以使用类似这样的方法定期执行一段代码,而不是 while 循环:

    final Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            //modify value
            //do something with new value
            handler.postDelayed(this, 500);
        }
    }, 500);