Android应用程序在while循环中崩溃
我正在制作这个应用程序,它告诉我们到达目的地还有多久,但每当我尝试使用它时,它只是黑屏崩溃。我认为这与循环有关,但我在网上找不到任何东西,有人能帮忙吗?提前感谢Android应用程序在while循环中崩溃,android,Android,我正在制作这个应用程序,它告诉我们到达目的地还有多久,但每当我尝试使用它时,它只是黑屏崩溃。我认为这与循环有关,但我在网上找不到任何东西,有人能帮忙吗?提前感谢 package com.example.myapplication; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.TextView; import java.util.Calendar
package com.example.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import java.util.Calendar;
import java.util.TimeZone;
import java.time.*;
import java.math.*;
public class TimeTIll extends AppCompatActivity {
private static final String DateUtils = null;
TextView txt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_time_till);
txt = (TextView) findViewById(R.id.TimeDipslay);
int i = 0;
while (i < 10) {
Program();
i++;
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
Thread.currentThread().interrupt();
}
}
}
public void Program() {
int totalMinutesSinceMidnight = 0;
long ms = 0;
long secondsM = 0;
long SecondsTillEstimate = 0;
long SecondsTillArrival1 = 0;
double MinutesTillArrival = 0;
double hoursTillArrival = 0;
double SecondsTillArrival = 0;
Calendar now = Calendar.getInstance();
Calendar midnight = Calendar.getInstance();
midnight.set(Calendar.HOUR_OF_DAY, 0);
midnight.set(Calendar.MINUTE, 0);
midnight.set(Calendar.SECOND, 0);
midnight.set(Calendar.MILLISECOND, 0);
try {
Thread.sleep(2000);
} catch (InterruptedException ex) {
Thread.currentThread().interrupt();
}
now = Calendar.getInstance();
midnight = Calendar.getInstance();
ms = now.getTime().getTime() - midnight.getTime().getTime();
totalMinutesSinceMidnight = (int) (ms / 1000);
secondsM = totalMinutesSinceMidnight;
SecondsTillEstimate = (60 * 60 * 23);
SecondsTillArrival1 = SecondsTillEstimate - secondsM;
hoursTillArrival = Math.floor(SecondsTillArrival1 / 3600);
SecondsTillArrival1 -= (hoursTillArrival * 3600);
MinutesTillArrival = Math.floor(SecondsTillArrival1 / 60);
SecondsTillArrival1 -= (MinutesTillArrival * 60);
SecondsTillArrival = SecondsTillArrival1;
txt.setText((int) hoursTillArrival + " Hours " + (int) MinutesTillArrival + " Minutes " + (int) SecondsTillArrival + " Seconds Till Arrival In Floriada");
}
}
package com.example.myapplication;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.widget.TextView;
导入java.util.Calendar;
导入java.util.TimeZone;
导入java.time.*;
导入java.math.*;
公共类TimeTIll扩展AppCompative活动{
私有静态最终字符串DateUtils=null;
文本视图;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u time\u-till);
txt=(TextView)findViewById(R.id.TimeDipslay);
int i=0;
而(i<10){
程序();
i++;
试一试{
睡眠(1000);
}捕获(中断异常例外){
Thread.currentThread().interrupt();
}
}
}
公共空间计划(){
整数总分钟数=0;
长ms=0;
长二次SM=0;
长估计=0;
长二次流L1=0;
双分钟到达=0;
双时距=0;
双倍到达时间=0;
Calendar now=Calendar.getInstance();
日历午夜=Calendar.getInstance();
午夜。设置(日历。一天中的小时,0);
午夜。设置(日历。分钟,0);
午夜。设置(日历秒,0);
午夜。设置(日历毫秒,0);
试一试{
《睡眠》(2000年);
}捕获(中断异常例外){
Thread.currentThread().interrupt();
}
现在=Calendar.getInstance();
午夜=Calendar.getInstance();
ms=now.getTime().getTime()-midnight.getTime().getTime();
总分钟数=(整数)(毫秒/1000);
secondsM=午夜后的总分钟数;
第二估算=(60*60*23);
SecondStillArrivalL1=SecondsTillEstimate-secondsM;
hoursTillArrival=数学楼层(1/3600);
第二次到达时间1-=(小时到达时间*3600);
MinutesTillArrival=数学楼层(第二层/第60层);
第二次到达时间1-=(分钟到达时间*60);
SecondsTillArrival=SecondStillArrivalL1;
txt.setText((int)hoursTillArrival+“Hours”+(int)MinutesTillArrival+“Minutes”+(int)SecondsTillArrival+“到达Floriada前的秒数”);
}
}
请阅读有关该项目的信息。您不能在onCreate
中调用长时间运行的任务,并期望它们显示除ANR崩溃以外的任何内容(您的onCreate
方法使用所有这些sleep语句阻塞UI线程,并在到达实际显示活动的onStart
和onResume
阶段之前生成ANR崩溃).
如果希望UI动态更改,可以使用处理程序定期执行方法。例如,要定期(此处为1000 ms)更新某些内容,您可以执行以下操作:
public class MainActivity extends AppCompatActivity {
private final Handler handler = new Handler();
private TextView txt;
private int count = 0;
private final int updateFreqMs = 1000; // call update every 1000 ms
@Override
protected void onPause() {
super.onPause();
handler.removeCallbacksAndMessages(null);
}
@Override
protected void onResume() {
super.onResume();
handler.postDelayed(new Runnable() {
@Override
public void run() {
updateTime();
handler.postDelayed(this, updateFreqMs);
}
}, updateFreqMs);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_time_till);
txt = findViewById(R.id.TimeDipslay);
}
private void updateTime() {
// here you update the displayed value
// this will be called every second indefinitely
// do your math and generate a string to print, just showing
// a counter here to demonstrate
++count;
txt.setText("Count = " + count);
}
}
我认为问题在于您试图将睡眠作为应用程序的主线程。在安卓系统中,我知道出于安全原因,这无法实现。 (详情请看此) 请尝试以下解决方案: