Skip to content

Latest commit

 

History

History
106 lines (78 loc) · 5.4 KB

File metadata and controls

106 lines (78 loc) · 5.4 KB

十三、针对高性能的调整

我们刚刚完成了后端和应用编程接口的掌握工作。我们的旅程即将结束,但还没有结束!我们必须涵盖一些非常重要的要点!其中之一就是性能优化。我们将通过一些良好的实践来指导您实现这一目标。想想我们到目前为止开发的代码,以及我们如何将这些建议应用到它上面。

在本章中,我们将涵盖以下主题:

  • 布局优化
  • 优化以延长电池寿命
  • 优化以获得最大响应

优化布局

要获得最大的用户界面性能,请遵循以下几点:

  • 优化布局层次:避免嵌套布局,因为它可能是性能杀手!例如,您可以嵌套多个LinearLayout视图。与其这样,不如切换到RelativeLayout。这可以显著节省您的性能!嵌套布局需要更多的处理能力用于计算和绘图。
  • 如果可能的话重复使用布局:安卓提供了<include />来允许这一点。

看看下面的例子:

    to_be_included.xml: 
    <RelativeLayout xmlns:android=
    "http://schemas.android.com/apk/res/android" 
      xmlns:tools="http://schemas.android.com/tools" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:background="@color/main_bg" 
      tools:showIn="@layout/includes" > 

      <TextView  
       android:id="@+id/title" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
     /> 

    </RelativeLayout>

    includes.xml 
      <LinearLayout xmlns:android=
      "http://schemas.android.com/apk/res/android" 
       android:orientation="vertical" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:background="@color/main_bg" 
      > 
       ... 
      <include layout="@layout/to_be_included"/> 
      ... 
    </LinearLayout> 
  • 除此之外,还可以使用<merge>。当一个布局包含在另一个布局中时,合并消除了视图层次结构中的冗余view groups。让我们看看下面的例子:
    to_merge.xml 
    <merge xmlns:android="http://schemas.android.com/apk/res/android"> 

     <ImageView 
        android:id="@+id/first" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:src="@drawable/first"/> 

     <ImageView 
        android:id="@+id/second" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:src="@drawable/second"/> 

   </merge> 

当我们使用 include 在另一个布局中包含to_merge.xml时,就像我们在前面的示例中所做的那样,Android 将忽略<merge>元素,并将我们的视图直接添加到放置<include />的容器中:

  • 仅当需要时才在屏幕中包含布局-如果此时不需要视图,将其可见性设置为Gone而不是InvisibleInvisible仍然会创建一个实例视图。使用Gone时,安卓只有在可视性变为Visible时才会实例化视图。
  • 使用像ListViewGridView这样的容器来保存您的数据组。我们在上一章已经解释了为什么要使用它们。

优化电池寿命

有很多方法可以耗尽你的电池。其中一个例子就是在应用中做了太多的工作。过多的处理会影响电池。但是,我们将指出您可以节省电池的方法以及您必须避免的情况。请遵循这些要点,并在每次开发应用时牢记它们。

要保持电池处于最佳状态,请遵循以下建议:

  • 尽可能减少网络通信。频繁的网络通话会影响您的电池。正因为如此,尽量做到这个最优。
  • 确定您的手机是否正在充电。这可能是一个很好的时机来激发密集和性能要求高的行动,您的应用可能需要这样做。
  • 仅当连接状态正常时,才监控连接状态并执行与连接相关的操作。
  • 合理利用广播信息。频繁和不必要的发送广播消息可能会让你付出代价。想想你需要它们的频率,当你不再需要接收消息,并且接收消息没有任何好处的时候,注销你的接收者。
  • 注意 GPS 的使用强度。频繁的位置请求会对您的电池造成严重影响。

保持应用的响应速度

有多少次你用了某个 Android 应用,得到消息说应用没有响应?为什么会这样?我们会解释的!请注意以下几点,这样您的应用就不会出现同样的情况:

  • 确保没有任何东西阻挡你的输入(任何密集的操作,尤其是网络流量)。
  • 不要在主应用线程上执行长时间的任务。
  • 不要对您的广播接收器执行onReceive()方法中的长时间运行操作。
  • 尽可能利用AsyncTask课。考虑使用ThreadPoolExecutor
  • 尽可能使用内容加载器。
  • 避免同时执行太多线程。
  • 如果写入文件系统,请从单独的线程执行。

如果您仍然有 ANRs,或者您的应用运行缓慢,请使用 systrace 和 Traceview 等工具来跟踪问题的根源。

摘要

在这简短但重要的一章中,我们强调了关于保持和实现良好的应用性能和响应的要点。这些建议在应用优化中至关重要。因此,如果您的应用不遵循这些规则,您必须对其进行相应的优化。通过完成这一章,我们涵盖了开发安卓应用所需的所有内容。在下一章,我们将测试它。准备好写一些单元和仪器测试!