ApiDemos 에 나와있는 샘플코드를 이용해서 바탕화면 AppWidget 용 DigitalClock 을 만드는데 시간이 가다가
자꾸 멈춥니다. 폰을 그냥 가만 두면 잘 가는데 뭐든 작업을 하면 멈춥니다. 안멈출 때도 있음.
분단위 클락인데 코드에 뭔가를 덧입혀야 합니까??
죽지 않게 하는 뭔가를 ..???
아시는 고수분님, 도와 주세요....힌트라도 좀.....
초보 개발자 올림
아,
위와같이 예기하면 죽지않게하는 뭔가가 있을 것 같아서.. 죄송하구요 아래에 전 소스를 올림니다.
에러도 없고 동작도 잘 합니다. 단지 런닝중.... 아마도 다른 엡으로 인해 폰씨피유가 바쁠시?? ,...
Unexpected....메시지와 함께 시간 업데이트를 멈추어 버립니다. 도움 부탁합니다.
public class ClockWidget extends AppWidgetProvider {
@Override
public void onDisabled(Context context) {
super.onDisabled(context);
context.stopService(new Intent(context, UpdateService.class));
}
@Override
public void onEnabled(Context context) {
super.onEnabled(context);
context.startService(new Intent(UpdateService.ACTION_UPDATE));
}
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
super.onUpdate(context, appWidgetManager, appWidgetIds);
context.startService(new Intent(UpdateService.ACTION_UPDATE));
}
public static final class UpdateService extends Service {
static final String ACTION_UPDATE = "widget.clock.action.UPDATE";
private final static IntentFilter sIntentFilter;
private final static String FORMAT_12_HOURS = "h:mm";
private final static String FORMAT_24_HOURS = "kk:mm";
private String mTimeFormat;
private String mDateFormat;
private Calendar mCalendar;
private String mAM, mPM;
static {
sIntentFilter = new IntentFilter();
sIntentFilter.addAction(Intent.ACTION_TIME_TICK);
sIntentFilter.addAction(Intent.ACTION_TIMEZONE_CHANGED);
sIntentFilter.addAction(Intent.ACTION_TIME_CHANGED);
}
@Override
public void onCreate() {
super.onCreate();
reinit();
registerReceiver(mTimeChangedReceiver, sIntentFilter);
}
@Override
public void onDestroy() {
super.onDestroy();
unregisterReceiver(mTimeChangedReceiver);
}
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
if (ACTION_UPDATE.equals(intent.getAction())) {
update();
}
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
private void update() {
mCalendar.setTimeInMillis(System.currentTimeMillis());
final CharSequence time = DateFormat.format(mTimeFormat, mCalendar);
final CharSequence date = DateFormat.format(mDateFormat, mCalendar);
RemoteViews views = new RemoteViews(getPackageName(), R.layout.main);
views.setTextViewText(R.id.Time, time);
views.setTextViewText(R.id.Date, date);
if ( ! is24HourMode(this)) {
final boolean isMorning = (mCalendar.get(Calendar.AM_PM) == 0);
views.setTextViewText(R.id.AM_PM, (isMorning ? mAM : mPM));
}
else {
views.setTextViewText(R.id.AM_PM, "");
}
ComponentName widget = new ComponentName(this, ClockWidget.class);
AppWidgetManager manager = AppWidgetManager.getInstance(this);
manager.updateAppWidget(widget, views);
}
private void reinit() {
final String[] ampm = new DateFormatSymbols().getAmPmStrings();
mDateFormat = getString(R.string.date_format);
mTimeFormat = is24HourMode(this) ? FORMAT_24_HOURS : FORMAT_12_HOURS;
mCalendar = Calendar.getInstance();
mAM = ampm[0].toLowerCase();
mPM = ampm[1].toLowerCase();
}
private static boolean is24HourMode(final Context context) {
return android.text.format.DateFormat.is24HourFormat(context);
}
private final BroadcastReceiver mTimeChangedReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
if (action.equals(Intent.ACTION_TIME_CHANGED) ||
action.equals(Intent.ACTION_TIMEZONE_CHANGED))
{
reinit();
}
update();
}
};
}
}