理解android:targetSdkVersion

    对于Android开发来讲,android:targetSdkVersion应该并不陌生,但在真正遇到问题时才发现,自己并不是完全了解他的作用,所以在这里记录一下自己学习到的相关内容。

    对于Android系统来讲,向前兼容一直是比较重要的问题。当应用使用低版本的SDK实现时,需要保证在更高的系统版本中仍能正常运行,且不出现问题。这就需要compileSdkVersion、miniSdkVersion、targetSdkVersion。

    在这里引用 https://medium.com/google-developers/picking-your-compilesdkversion-minsdkversion-targetsdkversion-a098a0341ebd#.egywqatjg中的原句:

targetSdkVersion is the main way Android provides forward compatibility by not applying behavior changes unless the targetSdkVersion is updated. This allows you to use new APIs (as you did update your compileSdkVersion right?) prior to working through the behavior changes.翻译过来:targetSdkVersion是Android提供的向前兼容的主要方式,除非更新targetSdkVersion,否则之前的行为不会发生改变。翻译不出来抓狂 。总得来讲,当targetSdkVersion比当前运行系统版本低时,将以低版本api运行,否则按照当前系统版本的api运行。

在之前的文章里,写过loadUrl加载“javascript:”在api19+与api18-时所出现的不同处理,具体的源码如下:

public void loadUrl(final String urlMap<StringStringadditionalHttpHeaders) {
         // TODO: We may actually want to do some sanity checks here (like filter about://chrome).
           
//  For backwards compatibility, apps targeting less than K will have JS URLs evaluated
         // directly and any result of the evaluation will not replace the current page content.
         // Matching Chrome behavior more closely; apps targetting >= K that load a JS URL will
         // have the result of that URL replace the content of the current page.
         final String JAVASCRIPT_SCHEME = "javascript:";
         if ( < .. &&
                 url != null && url.startsWith(JAVASCRIPT_SCHEME)) {
             .startYourEngines(true);
             if (checkNeedsPost()) {
                 .addTask(new Runnable() {
                     @Override
                     public void run() {
                         .evaluateJavaScriptEvenIfNotYetNavigated(
                                  url.substring(JAVASCRIPT_SCHEME.length()));
                     }
                 });
             } else {
                 .evaluateJavaScriptEvenIfNotYetNavigated(
                         url.substring(JAVASCRIPT_SCHEME.length()));
             }
             return;
         }
         LoadUrlParams params = new LoadUrlParams(url);
         if (additionalHttpHeaders != nullparams.setExtraHeaders(additionalHttpHeaders);
         loadUrlOnUiThread(params);
     }
 
见红底标识,..作为判断条件,做不同的处理。即加载“javascript:”时,这两种api下处理方式的不同。从这里可以看出android:targetSdkVersion的功用。也印证了上面的那句话,当应用中的targetSdkVersion版本小于当前所执行的系统版本时,会按照低版本的执行方式。

对于Android出现新系统时,若要修改targetSdkVersion,在修改此字段时,需做全面的测试,保证用户体验。当然为了兼容新版本,在出现新版本时,应及时更新targetSdkVersion。

参考相关文章:

  1.  http://www.race604.com/android-targetsdkversion/
  2.  http://https://medium.com/google-developers/picking-your-compilesdkversion-minsdkversion-targetsdkversion-a098a0341ebd#.fy7ix2y4m


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值