Android Tips 7

ohke9920 8年前
   <p>介绍关于Android的一些有趣的小知识点. 本文是第七篇, 欢迎阅读.</p>    <p><img src="https://simg.open-open.com/show/f8265fa3ef39f6d7df9b15011973257c.png"></p>    <h2>不兼容 Gradle 版本</h2>    <p>条件: 执行 gradle clean; gradle build 报错.</p>    <pre>  Error:(1, 0) Plugin with id 'com.android.application' not found  </pre>    <p>原因: 使用 gradle 命令的版本过低, 如使用 2.8版本 编译 2.10版本 的项目. 查看 gradle 版本, gradle -v .</p>    <p>升级Gradle命令的版本即可, 建立软连接命令.</p>    <pre>  ln -s /Users/wangchenlong/Installations/gradle-all/gradle-2.10/bin/gradle gradle  </pre>    <p>同时使用v2.8版本, 需要额外gradle命令, 如 gradle-v2.8 .</p>    <pre>  ln -s /Users/wangchenlong/Installations/gradle-all/gradle-2.10/bin/gradle gradle-v2.8  </pre>    <h2>AS 2.0 的 Sugar ORM 数据库</h2>    <p>在使用 Android Studio 2.x 版本时, 会启用 Instant Run 会影响 Sugar ORM数据库 的使用. <strong>取消</strong> 勾选即可.</p>    <p><img src="https://simg.open-open.com/show/c2ac47a09e2b242bf4c880744a525bbe.jpg"></p>    <p>否则报错, <a href="/misc/goto?guid=4959672564859067044" rel="nofollow,noindex">参考</a></p>    <pre>  Sugar ORM No Such Table Exception  </pre>    <h2>AlarmManager 取消注册</h2>    <p>AlarmManager有时会被系统关闭, 需要重复注册, 保证鲁棒性, 但保证只有一个生效, 需要取消之前的设置.</p>    <p>PendingIntent的标记选择 FLAG_UPDATE_CURRENT , 而不是 FLAG_CANCEL_CURRENT .</p>    <pre>  PendingIntent.getBroadcast(appContext, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);  </pre>    <p>设置之前取消即可, 为了安全, 可以捕获 setRepeating 的异常.</p>    <pre>  // 设置之前先取消前一个PendingIntent  am.cancel(pi);    // 设置每一天的计时器. 添加异常捕获, 防止崩溃  try {      am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pi);  } catch (Exception e) {      e.printStackTrace();  }  </pre>    <p>否则报错: Too many alarms registered from pid.</p>    <p><img src="https://simg.open-open.com/show/e47ad8e7217c443b2616de61a42f281d.jpg"></p>    <p><a href="/misc/goto?guid=4959672564950293605" rel="nofollow,noindex">参考</a></p>    <h2>Jack Option</h2>    <p>Android Studio 2.1.0 版本支持 <a href="/misc/goto?guid=4959670039058454734" rel="nofollow,noindex">Jack</a> 的功能, 即 <strong>Java Android Compiler Kit</strong> . Jack是Android新的工具链, 优点是完全开源(与Oracle之争), 加快编译速度(节省一步), 提供代码优化与混淆功能.</p>    <p><img src="https://simg.open-open.com/show/4d9cab40537cd7d19102bb2cbe135808.jpg"></p>    <p>使用方式</p>    <pre>  android {      defaultConfig {          jackOptions {              enabled true          }      }      compileOptions {          sourceCompatibility JavaVersion.VERSION_1_8          targetCompatibility JavaVersion.VERSION_1_8      }  }  </pre>    <p>非常遗憾, 依赖注入库Dagger或Butterknife的核心库 android-apt 暂时不支持Jack, <a href="/misc/goto?guid=4959672565070954266" rel="nofollow,noindex">参考</a> .</p>    <pre>  com.neenbedankt.gradle.plugins:android-apt:1.8  </pre>    <p>需要编译版本 Build Tools 24.0.0+ , 即 Android N 以上.</p>    <h2>启动页面留白</h2>    <p>应用在启动时, 系统会加载数据, 需要启动完成 Application 的onCreate方法, Activity 的onCreate与onResume方法, 会产生短暂的留白, 不可避免.</p>    <p>也可能是黑色, 与应用的主题有关, light是白色, dark是黑色.</p>    <p>一些主流应用都会解决这一问题, 如微信\QQ\网易云音乐等, 但某些应用可能并未注意. 去掉留白需要修改启动页面的主题样式, 设置 windowBackground 属性, 默认是白色, 可以修改为其他颜色或展示Logo图片.</p>    <pre>  <style name="WelcomeTheme" parent="Theme.AppCompat.Light.NoActionBar">   <item name="windowNoTitle">true</item>   <item name="windowActionBar">false</item>   <item name="android:windowFullscreen">true</item>   <item name="android:windowBackground">@drawable/launch_logo</item>  </style>  </pre>    <p>并且把首页布局的背景设置为透明, 在加载完成后, 再显示广告或其他信息.</p>    <pre>  android:background="@android:color/transparent"  </pre>    <p>这样可以提升用户体验, 开发之道在于细节. Thx@柏毅老师.</p>    <p>OK, that’s all! Enjoy it!</p>    <p> </p>    <p>来自: <a href="/misc/goto?guid=4959672565155324469" rel="nofollow">http://www.wangchenlong.org/2016/05/07/tips/1605/072-android-tips-7/</a></p>