मैं AlarmManager को क्रियान्वित किया है दिन में एक बार फोन जगाने के लिए, एक अद्यतन कार्य विजेट का अद्यतन करें और यदि लागू हो सूचनाएं भेजने के लिए के साथ दोहराया नहीं जाता है।एंड्रॉयड AlarmManager setRepeating लंबे अंतराल
मैं setRepeating
और ELAPSED_REALTIME_WAKEUP
अलार्म का उपयोग कर रहा पहली बार (SystemClock.elapsedRealtime()+60000
) शुरू हो रहा है, लेकिन यह 86400000
मिलीसेकंड (24 घंटे) बाद में शुरू हो रहा प्राप्त करता है।
वाकई इस के साथ संघर्ष कर, मैं गलत या अगर कोई बेहतर तरीके मैं क्या करने की कोशिश कर रहा हूँ प्राप्त करने के लिए कर रहे हैं कुछ im कर स्वीकार करने के लिए खुश हूँ। हालांकि मुझे लगता है कि मेरा कोड मानक चीज की तरह दिखता है जो लोग ऐसा करते हैं।
यह लगभग दोहरा अलार्म की तरह है नहीं करता है यह क्या कहना है कि वह सभी मामलों में ऐसा करना चाहिए। अगर मैं 10 मिनट कहने के अंतराल को कम करता हूं तो यह काम करता है, मेरा अलार्म ट्रिगर होता है और सेवा खत्म हो जाती है।
मेरे ऐप की प्रकृति एक बार से अधिक अद्यतन करने का मतलब है एक दिन overkill है। मैं इस के लिए एक यथार्थवादी विश्वसनीय समाधान खोजने के लिए की जरूरत है।
अपना समय & के लिए धन्यवाद आशा है कि आप मुझे सही दिशा में बात कर सकते हैं।
यहाँ मेरी अलार्म कार्यान्वयन कोड है ...
मैनिफ़ेस्ट: बूट प्रसारण के लिए
<receiver android:name=".SystemChangeReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE" />
</intent-filter>
</receiver>
<receiver android:name=".UpdateAlarmReceiver" />
<service android:name=".UpdateService" />
<receiver android:name=".WidgetProviderSmall" android:label="@string/widget_small_label">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/appwidget_small" />
</receiver>
<receiver android:name=".WidgetProviderLarge" android:label="@string/widget_large_label">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/appwidget_large" />
</receiver>
SystemChangeReceiver
सुनता है, चेकों एक अलार्म की जरूरत है स्थापित किया जाना है, अगर यह होता है, यह तय करता है।
SystemChangeReceiver
:
@Override
public void onReceive(Context context, Intent intent) {
SharedPreferences prefs = context.getSharedPreferences(context.getString(R.string.prefs_name), 0);
Boolean notifications = prefs.getBoolean("enable_updates", false);
if(notifications == true) {
Utils.setNotificationAlarm(context);
}
}
setNotificationAlarm विधि, दोहरा अलार्म सेट ...
public static void setNotificationAlarm(Context context) {
AlarmManager alarmManager=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, UpdateAlarmReceiver.class);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0);
alarmManager.setRepeating(
AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime()+60000,
86400000,
pi);
}
अलार्म मेरी रिसीवर UpdateAlarmReceiver
ट्रिगर होता है तो निर्णय लेता है कि क्या करना है और WakefulIntentService
का उपयोग कर मेरी पृष्ठभूमि अद्यतन चलाता है प्रक्रिया, सेवा के लिए हैंडलर विजेट अपडेट करता है और आवश्यकतानुसार अधिसूचना भेजता है
UpdateAlarmReceiver
:
public void onReceive(Context context, Intent intent) {
WakefulIntentService.sendWakefulWork(context, UpdateService.class);
}
त्वरित प्रश्न यह सब हल कर सकता है: क्या आप एक कार्य हत्यारा का उपयोग करते हैं? क्या आपका ऐप श्वेतसूची पर है? –
मैं वास्तव में ऑटोकिल्लर मेमोरी ऑप्टिमाइज़र का उपयोग कर रहा हूं, इसमें श्वेतसूची नहीं है यह समस्या हो सकती है? प्रक्रिया सूची के अनुसार मेरा ऐप अभी भी चल रहा है। – Rob