我的应用程序停止响应
问题描述:
因此,只要我在我的设备上启动我的应用程序,它运行良好,但是当我按下按钮时,它什么也不做,除非保持高调,然后弹出说它没有响应这里是代码。我认为它是我在OnClickListerner中拥有代码的方式。包com.dicamillo.alarm;我的应用程序停止响应
import java.util.Calendar;
import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.DigitalClock;
import android.widget.TimePicker;
public class AlarmlockActivity extends Activity implements OnClickListener {
/** Called when the activity is first created. */
TimePicker tp;
Button set;
int hour;
int minuet;
DigitalClock dc;
Calendar calendar = Calendar.getInstance();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tp = (TimePicker) findViewById(R.id.tpAlarmTime);
set = (Button) findViewById(R.id.bSet);
dc = (DigitalClock) findViewById(R.id.digitalClock1);
hour = calendar.get(Calendar.HOUR);
minuet = calendar.get(Calendar.MINUTE);
set.setOnClickListener(this);
}
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.bSet:
while (tp.getCurrentHour().intValue() != hour
&& tp.getCurrentMinute().intValue() != minuet) {
tp.getCurrentHour().intValue();
tp.getCurrentMinute().intValue();
if (tp.getCurrentHour().intValue() == hour
&& tp.getCurrentMinute().intValue() == minuet) {
MediaPlayer mp = MediaPlayer.create(AlarmlockActivity.this,
R.raw.alarm);
}
}
break;
}
}
}
答
任何在onclick方法运行在UI线程上。您的while循环挂起应用程序,操作系统(正确)强制停止。
研究使用AsyncTask从UI线程获取代码。您应该在每次循环迭代后暂停以避免不必要的CPU使用。
答
您的while
将基本上永远在主UI线程上循环,直到您的TimePicker
的小时/分钟与当前时间匹配。这就是从操作系统引起的ANR消息。
您不应该在UI线程上运行长操作。使用线程或处理程序或AsyncTasks来实现您想要的结果。
答
你试过检查logcat吗?