所以每当我在我的设备上启动我的应用程序它运行正常但是当我按下一个按钮它没有做任何例外保持高亮,然后弹出说它没有响应这里是代码。我认为它是我在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;
}
}
}
答案 0 :(得分:2)
onClick方法中的任何内容都在UI线程上运行。你的while循环挂起应用程序,操作系统(正确地)迫使它停止。
考虑使用AsyncTask从UI线程中获取代码。您还应该在每次循环迭代后暂停,以避免不必要的CPU使用。
答案 1 :(得分:0)
您的while
基本上会在主UI线程上永远循环,直到TimePicker
的小时/分钟与当前时间匹配。这就是导致操作系统发出ANR消息的原因。
您不应该在UI线程上运行长操作。使用Threads或Handler或AsyncTasks来实现您想要的结果。
答案 2 :(得分:0)
您是否尝试过检查logcat?!