在 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);
我正在尝试通过模拟来模拟不断变化的 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);