|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
视图是仪表盘模型是发动机控制器是控制芯片CoreData---管理数据OBJC刚学的时候觉得CD很高深其实他是最容易用的库之一在后面的文章中,我们在主屏幕上增加了一个使用小部件,但其实不能显现任何实在数据。看上往没甚么实践用途。在这篇文章中,我们将在小部件上显现工夫。
为了在小部件上更新工夫,我们将利用IntentService。相对经由过程挪用Context.startService(Intentintent)启动的一样平常AndroidService,IntentService对照特别——一旦举措(Action)实行终了就会主动封闭。IntentService十分合适按期实行的细粒度操纵。与背景服务分歧,这些操纵的不会实行很长工夫,因而义务办理器没法发明并杀逝世这些操纵。
为了完成IntentService接口,必需要掩盖机关函数和onHandleIntent()办法,还必要声明一个DateFormat,前面将会用到。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
publicclassTextClockServiceextendsIntentService{
privatestaticfinalDateFormatdateFormat=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss.SSS");
privatestaticfinalStringTAG="TextClockService";
publicstaticfinalStringACTION_UPDATE="com.stylingandroid.textclock.ACTION_UPDATE";
publicTextClockService(){
super(TAG);
}
@Override
protectedvoidonHandleIntent(Intentintent){
if(intent.getAction().equals(ACTION_UPDATE)){
//TODO:handletheIntent
}
}
}
每次IntentService启动时城市挪用onHandleIntent()办法,办法实行终了服务会主动封闭。我们还必要一个自界说举措用来触发组件更新。
假如想让猎取的工夫尽量成心义,倡议利用WakeLock制止设备休眠(这会制止我们的服务运转),大概利用MarkMurphy的WakefulIntentService。但是,我们只必要实行很短的工夫,以是不必要如许做。
固然,如今我们必要在Manifest内里声明过滤器呼应我们自界说的举措。
1
2
3
4
5
6
<serviceandroid:name=".TextClockService">
<intent-filter>
<actionandroid:name="com.stylingandroid.textclock.ACTION_UPDATE"/>
<categoryandroid:name="android.intent.category.DEFAULT"/>
</intent-filter>
</service>
如许我们的IntentService就界说好了,可是如何更新使用小部件?
一个使用小部件和一个尺度的Activity有很年夜分歧:在Activity里你能够做任何你想做的事变;使用小部件会在主界面运转,大概另有其他小部件在运转,我们不克不及对他们搅扰。比方,一般的Activity地区内能够绘制凌驾本身的地区,乃至能够经由过程clipChildern属性处置父控件的结构。但是,在主界面如许做会搅扰其他部件。为了制止小部件这类举动,它们不克不及间接会见小部件结构及其子视图。因而,小部件必要利用RemoteViews对象更新这些视图。RemoteViews是一个代办署理,它会供应对这些视图带限定的会见。以是,能够在我们的使用小部件中利用上面这些小部件。它们是:
- AnalogClock
- Button
- Chronometer
- ImageButton
- ImageView
- ProgressBar
- TextView
- ViewFlipper
- ListView
- GridView
- StackView
- AdapterViewFlipper
一样的限定,我们的小部件只能利用以下结构:
- FrameLayout
- LinearLayout
- RelativeLayout
- GridLayout
固然看上往有些限定,可是我们仍能做出很酷的工具。上面我们经由过程服务更新工夫,每当服务启动时实行以下代码:
<p>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
@Override
protectedvoidonHandleIntent(Intentintent){
<p>if |
|