日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android 轮询最佳实践 Service + AlarmManager

發(fā)布時間:2023/12/20 Android 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android 轮询最佳实践 Service + AlarmManager 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??

雖然alarm的意思是鬧鐘,而且在原生android自帶的鬧鐘應(yīng)用中AlarmManager也確實非常重要,但并不代表AlarmManager只是用來做鬧鐘應(yīng)用的,作為一個一種系統(tǒng)級別的提示服務(wù),肯定應(yīng)該有著非常重要的地位,實際上android中很多東西都可以利用AlarmManager來實現(xiàn)。

AlarmManager在特定的時刻為我們廣播一個指定的Intent。簡單的說就是我們設(shè)定一個時間,然后在該時間到來時,AlarmManager為我們廣播一個我們設(shè)定的Intent。這個intent可以指向一個activity,也可以指向一個service。

下面就是使用alarm定時調(diào)用service實現(xiàn)輪詢的實現(xiàn)方法:

一、新建輪詢工具類PollingUtils.java

?

public class PollingUtils {//開啟輪詢服務(wù)public static void startPollingService(Context context, int seconds, Class<?> cls,String action) {//獲取AlarmManager系統(tǒng)服務(wù)AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);//包裝需要執(zhí)行Service的IntentIntent intent = new Intent(context, cls);intent.setAction(action);PendingIntent pendingIntent = PendingIntent.getService(context, 0,intent, PendingIntent.FLAG_UPDATE_CURRENT);//觸發(fā)服務(wù)的起始時間long triggerAtTime = SystemClock.elapsedRealtime();//使用AlarmManger的setRepeating方法設(shè)置定期執(zhí)行的時間間隔(seconds秒)和需要執(zhí)行的Servicemanager.setRepeating(AlarmManager.ELAPSED_REALTIME, triggerAtTime,seconds * 1000, pendingIntent);}//停止輪詢服務(wù)public static void stopPollingService(Context context, Class<?> cls,String action) {AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);Intent intent = new Intent(context, cls);intent.setAction(action);PendingIntent pendingIntent = PendingIntent.getService(context, 0,intent, PendingIntent.FLAG_UPDATE_CURRENT);//取消正在執(zhí)行的服務(wù)manager.cancel(pendingIntent);} }

?二、構(gòu)建輪詢?nèi)蝿?wù)執(zhí)行PollingService.java

?

?

public class PollingService extends Service {public static final String ACTION = "com.ryantang.service.PollingService";private Notification mNotification;private NotificationManager mManager;@Overridepublic IBinder onBind(Intent intent) {return null;}@Overridepublic void onCreate() {initNotifiManager();}@Overridepublic void onStart(Intent intent, int startId) {new PollingThread().start();}//初始化通知欄配置private void initNotifiManager() {mManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);int icon = R.drawable.ic_launcher;mNotification = new Notification();mNotification.icon = icon;mNotification.tickerText = "New Message";mNotification.defaults |= Notification.DEFAULT_SOUND;mNotification.flags = Notification.FLAG_AUTO_CANCEL;}//彈出Notificationprivate void showNotification() {mNotification.when = System.currentTimeMillis();//Navigator to the new activity when click the notification titleIntent i = new Intent(this, MessageActivity.class);PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, i,Intent.FLAG_ACTIVITY_NEW_TASK);mNotification.setLatestEventInfo(this,getResources().getString(R.string.app_name), "You have new message!", pendingIntent);mManager.notify(0, mNotification);}/*** Polling thread* 模擬向Server輪詢的異步線程* @Author Ryan* @Create 2013-7-13 上午10:18:34*/int count = 0;class PollingThread extends Thread {@Overridepublic void run() {System.out.println("Polling...");count ++;//當(dāng)計數(shù)能被5整除時彈出通知if (count % 5 == 0) {showNotification();System.out.println("New message!");}}}@Overridepublic void onDestroy() {super.onDestroy();System.out.println("Service:onDestroy");} }

?三、AndroidManifest.xml 配置

?

?

<!--服務(wù)配置--><serviceandroid:name="com.ryantang.service.PollingService"android:exported="false"><intent-filter><action android:name="com.ryantang.service.PollingService" /></intent-filter></service>

?四、在MainActivity.java中開啟和停止PollingService

public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//Start polling serviceSystem.out.println("Start polling service...");PollingUtils.startPollingService(this, 5, PollingService.class, PollingService.ACTION);}@Overrideprotected void onDestroy() {super.onDestroy();//Stop polling serviceSystem.out.println("Stop polling service...");PollingUtils.stopPollingService(this, PollingService.class, PollingService.ACTION);} }

?

?

轉(zhuǎn)載于:https://my.oschina.net/huqiji/blog/804866

總結(jié)

以上是生活随笔為你收集整理的Android 轮询最佳实践 Service + AlarmManager的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。