0

因此,每当我在我的设备上启动我的应用程序时,它运行良好,但是当我按下按钮时,它什么也不做,除了保持高亮,然后弹出说它没有响应这里是代码。我认为这是我在 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;
    }
}

}

4

3 回答 3

2

onClick 方法中的任何内容都在 UI 线程上运行。您的 while 循环正在挂起应用程序,并且操作系统(正确地)强制它停止。

研究使用AsyncTask让您的代码脱离 UI 线程。您还应该在每次循环迭代后暂停,以避免不必要的 CPU 使用。

于 2012-07-15T00:55:38.617 回答
0

while将基本上在主 UI 线程上永远循环,直到您的小时/分钟TimePicker与当前时间匹配。这就是导致操作系统发出 ANR 消息的原因。

您不应该在 UI 线程上运行长时间的操作。使用 Threads 或 Handlers 或 AsyncTasks 来实现您想要的结果。

于 2012-07-15T01:52:39.723 回答
0

你试过检查logcat吗?!

于 2012-07-15T22:49:50.173 回答