2014-07-05 2 views
2

나는 게임과 유사한 응용 프로그램을 구축하고 있으며 배경, 전경, 경보 등에서 서비스로 실행하는 모든 다른 접근 방법에 대해 읽었으며 약간 혼란 스럽습니다.서비스 또는 IntentService 또는 AlarmManager 접근

내 애플이 (예)처럼 갈 것 :

  • 사용자가 홈페이지에있는 버튼을 누르면, activity1에 그가 필요로 어떤
  • 사용자 마감을 열어
  • 분 30 후 그는이 응용 프로그램을 닫을 수 있습니다은 2 시간 후에 다음 활동을 시작합니다.
  • 2 시간 후에 Activity2가 열립니다.
  • 사용자가 원하는대로 무엇이든 완료합니다. 엘, Activity3가 열립니다 하루 후 다음 중 하나
  • 을 트리거 등

은 무엇 최선의 방법 일 것입니다에? 이러한 활동을 열기 위해 지속적으로 서비스를 실행하거나 사용자가 활동 중 하나를 완료 할 때마다 새 경보가 시작되도록 설정하십시오.

+0

사용자의 배터리를 태우고 서비스를 실행하고 싶습니까? 하지만 안드로이드는 오래 실행중인 서비스를 죽일 수 있기 때문에 알람 관리자를 사용하는 것이 좋습니다. – brummfondel

+0

사용자는 매 간격마다 활동을 시작한다는 것을 어떻게 알 수 있습니까? - 'AlarmManager'를 사용하여 버튼을 누른 후 인 텐트를 실행하십시오. 3 번 이상 알람을 설정하지 마십시오. 하나의 알람을 설정하고, 알람이 울리면 다음 알람을 설정하십시오. – SQLiteNoob

+0

활동은 예를 들어 소리 재생을 시작할 수 있습니다. 하나 이상의 알람을 설정하는 것이 좋지 않습니까? – KKO

답변

3

몇 시간 동안 유휴 상태가 될 수있는 서비스를 만들지 마십시오. 그것은 말도 안돼. 당신이해야 할 일은


알람을 만드는 것입니다. 다음과 같습니다.

alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 

Calendar calendar = Calendar.getInstance(); 
calendar.setTimeInMillis(System.currentTimeMillis()); 
calendar.set(Calendar.HOUR_OF_DAY, 14); 

alarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 
     AlarmManager.INTERVAL_DAY, alarmIntent); 

이것은 단지 Alarm API의 일반적인 예입니다. 필요에 맞게 조정해야합니다.


마침내 - 경보는 부팅시 복원력이 없습니다! 즉 : 어떤 이유로 든 사용자의 장치가 다운되면 모든 알람이 손실됩니다.

//manifest: 

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> 



<receiver android:name=".MyBootReceiver" 
     android:enabled="false"> 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED"></action> 
    </intent-filter> 
</receiver> 


//java class 
public class MyBootReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) { 
      // restart alarms 
     } 
    } 
} 


: 앱은 당신이 RECEIVE_BOOT_COMPLETED라는 이벤트에 등록해야합니다 부팅 탄력되고 싶지 않는 경우가 보류중인 알람을 다시 시작 어디에

(후 부팅을 생각) 희망 하시겠습니까?