lem*_*des 1 android android-handler
好的,所以我已经阅读了许多关于处理程序的教程和线程,但是他们似乎对我自己的处理程序知识更加先进,这是我第一次使用处理程序这么光顾我.我在处理程序上有这个示例应用程序,它在某个时间触发Log,但是当我点击我的开始按钮时它似乎无法正常工作.以下是我的代码.
public class Main extends Activity {
private long selectedTimeInMills;
private Handler handler;
private static final Calendar CALENDAR = Calendar.getInstance();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TimePicker timepicker = (TimePicker) findViewById(R.id.timePicker1);
final TextView timeText = (TextView) findViewById(R.id.time);
Button start = (Button) findViewById(R.id.button1);
handler = new Handler();
String textTime = formatDate(CALENDAR.getTimeInMillis(), "hh:mm a");
timeText.setText(textTime);
timepicker.setOnTimeChangedListener(new OnTimeChangedListener() {
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
CALENDAR.set(Calendar.HOUR_OF_DAY, hourOfDay);
CALENDAR.set(Calendar.MINUTE, minute);
selectedTimeInMills = CALENDAR.getTimeInMillis();
String textTime = formatDate(CALENDAR.getTimeInMillis(), "hh:mm a");
timeText.setText(textTime);
}
});
start.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Runnable runnable = new Runnable() {
public void run() {
Log.d("HandlerCheck", "Handler Fired! @ ("+selectedTimeInMills+") "+formatDate(selectedTimeInMills, "hh:mm a"));
}
};
boolean flag = handler.postAtTime(runnable, selectedTimeInMills);
Toast.makeText(Main.this, "Handler is Fired?:: "+flag, Toast.LENGTH_LONG).show();
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
注意:当我点击我的按钮并实现handler.postAtTime()它返回true但仍然不会显示登录DDMS即使我已经设置我的时间戳从当前时间1分钟仍然不会触发DDMS上的日志消息
postAtTimeHandler类中的方法接受来自statup的时间,以毫秒为单位; 不是Calendar时间(这是你要经过的).你应该SystemClock.uptimeMillis()用来计算时间.
或者,您可以使用postDelayed函数在设置的时间段(以毫秒为单位)后调用Runnable对象.
// Introduce a new private variable
private long delayedTimeInMillis;
// Update delayedTimeInMillis inside onTimeChanged method:
delayedTimeInMillis = selectedTimeInMills - Calendar.getInstance().getTimeInMillis();
// replace handler.postAtTime(runnable, selectedTimeInMills); line with this:
handler.postDelayed(runnable, delayedTimeInMillis)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
370 次 |
| 最近记录: |