|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
写学习日记,这是学习历程的见证,同时我坚持认为是增强学习信念的法宝。以上是我学习Linux的心得体会,希望对大家的学习有所帮助,由于水平有限,本文难免有所欠缺,望请指正。
在后面的文章中,我们一向努力于开辟一个能够在GooglePlay上公布的复杂App。由于上一篇文章中提出在App中发明一个Bug,以是在这篇文章中,我们将寻觅工具够探测并修复该Bug。
在这之前,起首得道个歉。在上一篇文章中我答应这篇文章将会先容一个新的特征,可是Bug的呈现打乱这个节拍。与其增添一个新特征却Bug不克不及利用App,还不如起首会合精神修复这个Bug。以是在此,对那些想进修新特征的人说一声抱愧了。
那些在他们设备上装了TextclockApp的人大概会遭到2013年2月23号更新版本的净化。当用户碰到软件溃散的时分,他们会有一个时机来向开辟者的提交碰到的Bug。当有效户提交了以后,开辟者会在把持台失掉一个毛病呈报日记。上面这张图就是我收到的一个毛病呈报。
<br>
这告知我们这个Bug是由NoSuchMethodError非常引发的。这个非常是由android.appwidget.AppWidgetManager.getAppWidgetOptions的办法抛出的。假如我们检察一下关于这个办法的官方文件,我们会发明它在官方API16中的先容:
<br>
如今,这个成绩十分分明。当这个App运转在一个装API16(JellyBean4.1)大概装有16之前版本的操纵体系设备上时,体系不撑持这个办法。以是会抛出NoSuchMethodError非常。与此同时,毛病呈报还告知我们这个办法在那边被挪用:TextClockService的updateTime办法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
privatevoidupdateTime(Calendardate){
Log.d(TAG,"Update:"+dateFormat.format(date.getTime()));
AppWidgetManagermanager=AppWidgetManager.getInstance(this);
ComponentNamename=newComponentName(this,TextClockAppWidget.class);
int[]appIds=manager.getAppWidgetIds(name);
String[]words=TimeToWords.timeToWords(date);
for(intid:appIds){
Bundleoptions=manager.getAppWidgetOptions(id);
intlayoutId=R.layout.appwidget;
if(options!=null){
inttype=options.getInt("appWidgetCategory",1);
if(type==2){
layoutId=R.layout.keyguard;
}
}
RemoteViewsv=newRemoteViews(getPackageName(),layoutId);
updateTime(words,v);
manager.updateAppWidget(id,v);
}
}
只管像后面会商过的,我们App具有必定的API向前兼容性,可是这个成绩是由我们对getAppWidgetOptions包涵性忽略酿成的。
办理这个成绩绝对简单,并且能够用我们之前会商过的手艺来确保API版本的向前兼容性。起首必要检测操纵体系的API版本,并依据我们检测的了局来断定实行哪段代码。
<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
privatevoidupdateTime(Calendardate)
{
<p>Log.d(TAG, |
|