android 정시 작업 수행

AlarmManager, 알 람 서비스 입 니 다. 안 드 로 이 드 폰 에서 보증 해 야 합 니 다.
AlarmManager 의 시 계 는 실제 시간 과 동기 화 되 어 있 습 니 다. 따라서 Android 휴대 전화 휴면 상태 에서 AlarmManager 의 시간 은 느 려 지지 않 습 니 다. 다음은 AlarmManager 의 기본 사용 을 소개 합 니 다.
    AlarmManager 의 사용 메커니즘 은 전역 타이머 라 고도 부 르 고, 어떤 것 은 자명종 이 라 고도 부른다.그것 에 대한 사용 을 통 해 그것 의 작용 은 Timer 와 약간 비슷 하 다.모두 두 가지 비슷 한 용법 이 있다. (1) 지 정 된 시간 이 지난 후에 특정한 조작 을 집행 한다 (2) 주기 적 으로 특정한 조작 을 집행 한다.
    AlarmManager 대상 이 Intent 와 함께 사용 하면 한 Activity 를 정기 적 으로 열 고 BroadCast 를 보 내 거나 서 비 스 를 시작 할 수 있 습 니 다. 아래 코드 는 두 가지 정시 방식 의 사용 을 상세 하 게 소개 합 니 다. (1) 지 정 된 시간 후에 특정한 조작 을 수행 할 수 있 습 니 다.
/ / 이하 의 코드 는 본인 의 < < 축구 실시 간 스코어 > > 중의 코드 부분 입 니 다.
public static AlarmManagerUtil{
        public static AlarmManager getAlarmManager(Context ctx){
		return (AlarmManager) ctx.getSystemService(Context.ALARM_SERVICE);
	}
 
	/**
	 *              (       )
	 *   : Receiver   manifest.xml   
         * 
	 * @param ctx
	 */
	public static void sendUpdateBroadcast(Context ctx){
	    Log.i("score", "send to start update broadcase,delay time :"+60000);
 
	    larmManager am = getAlarmManager(ctx);
            // 60       ,  UpdateReceiver   ,                    
	    Intent i = new Intent(ctx, UpdateReceiver.class); 
	    PendingIntent pendingIntent = PendingIntent.getBroadcast(ctx, 0, i, 0);
	    am.set(AlarmManager.RTC, System.currentTimeMillis()+60000, pendingIntent);
	}
 
 	/**
	 *       (       )
	 * 
	 * @param ctx
	 */       
	public static void cancelUpdateBroadcast(Context ctx){
	    AlarmManager am = getAlarmManager(ctx);
	    Intent i = new Intent(ctx, UpdateReceiver.class);
	    PendingIntent pendingIntent = PendingIntent.getBroadcast(ctx, 0, i, 0);
	    am.cancel(pendingIntent);
	}
}
 
//            
public static class UpdateReceiver extends BroadcastReceiver{
        public void onReceive(Context context, Intent intent) {
             Toast.makeText(context, "      ", Toast.LENGTH_LONG).show();
 
             //        (  ) 60                  .
             //       JavaScript   setTimeout(xxx,60000)
             AlarmManagerUtil.sendUpdateBroadcast(context);
        }
    }

(2) 어떤 조작 을 주기 적 으로 집행 한다.
public static void sendUpdateBroadcastRepeat(Context ctx){
    Intent intent =new Intent(ctx, UpdateReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(ctx, 0, intent, 0);
 
    //    
    long firstime=SystemClock.elapsedRealtime();
 
    AlarmManager am = (AlarmManager) ctx.getSystemService(ALARM_SERVICE);
  //60     ,       
    am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstime, 60*1000, pendingIntent);
}

타이머 취소 (알 람)
 	/**
	 *       (       )
	 * 
	 * @param ctx
	 */       
	public static void cancelUpdateBroadcast(Context ctx){
	    AlarmManager am = getAlarmManager(ctx);
            //      UpdateReceiver.class        ,        
	    Intent i = new Intent(ctx, UpdateReceiver.class);  
	    PendingIntent pendingIntent = PendingIntent.getBroadcast(ctx, 0, i, 0);
	    am.cancel(pendingIntent);
	}
}

좋은 웹페이지 즐겨찾기