開啓一個服務定時更新widget組件

開啓一個服務定時更新widget組件

1.創建一個類繼承AppWidgetProvider類實現裏面的onEnabled()跟onDisabled()方法

2.在onEnabled()方法中進行初始化操作,用意圖開啓一個後臺的服務,讓服務更新widget裏面的內容

3.創建一個繼承Service服務,這個服務是用來更新widget的內容的,複寫裏的onCreate()跟onDestroy()方法

4.在onCreate()方法時定時的去更新widget裏面的內容,用定時器

Time創建一個定時器

TimerTask創建一個定時任務,在任務中的run()方法中去更新widget

5.在run()方法中更新widget

1>獲取widget管理器的實例

AppWidgetManger awm = AppWidgetManager.getInstance(getApplicationContext());//在service中用getApplicationContext()方法去獲取上下文

2.>widget管理器有如下方法

getAppWidgetIds(ComponentName provider)//可以獲取widget的id

getAppWidgetInfo()可以獲取widget的信息

updateAppWidget(provider,views);

provider:定義要更新的widget的組件(廣播接收者)

ComponentName provider = new ComponentName(pkg,cls);第一參數是組件所在包名,getPackageName()得到,第二參數是widger的class名稱(cn.itcast.mobilesafe.receiver,MyWidget)

views:RemoteViews的對象,是遠程的view對象,widget的顯示其實是一個進程間通信的操作,在手機衛士的進程裏面把view對象準備出來,傳遞給桌面的應用

 RemoteViews views = new remoteViews(packageName,layoutId);

packageName:view對象本身所在的包名getPackageName(),即桌面程序

layoutId:widget的佈局在我們的手機衛士裏定義的widget佈局,然後就創建出來一個可以在進程間進行通訊的view對象了

3>拿到RemoteViews對象以後就可以更改裏面的內容了

views.setBitmap()設置一個位圖

views.setTextViewText(viewId,text);//更新某一個textView裏面的文本

views.setTextViewText(R.id.process_count,"正在運行進程數"+count);這裏的R.id.process_count是在widget佈局裏定義的textView組件的id

 

6.run()方法完成後開啓這個定時器

timer.schedule(task,1000,1000);每隔一秒鐘更新一次

7.在onDestory()服務退出時調用如下方法:

timer.cancel;

timer = null;

task = null;

8.完成上面的service類就在我們定義的繼承AppWindgetProvider類的onEnabled()方法中開啓這個服務

Intent intent = new Intent(context,UpdateWidgetService.class);

context.startService(intent);

9.在onDisable()方法中停止這個服務

context.stopService(intent);

10.因爲這個widget是一個廣播接收者,所以生命週期只有10幾秒鐘,所以在關閉時,把初始化這個服務

Intent intent = new Intent(context,UpdateWidgetService.class);否則關閉服務會報空指針

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章