Android性能优化

xiaoxiao2021-02-28  113

1.布局优化 1.1使用标签重用layout 项目种使用共通ui时,多个页面绘制布局会出现重复,不容易后期维护等问题,就需要将相同布局元素提出,写一个共通的xml布局文件 如: 通用layout:topbar.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:text="TextView" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/textView" /> </LinearLayout>

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="cn.day.read.MainActivity"> <include layout="@layout/topbar" /> </RelativeLayout>

注意:如需要在标签覆盖类似原布局中的宽、高需指定宽、高属性

1.2使用实现view的延迟加载 有时我们需要布局两个东东,其中一个在特定情况下才会显示,比如点了某个按钮才需显示其布局,这时我们想到我把布局全部写好把暂时不需要的布局先隐藏GONE掉不就ok了么,但系统会将所有画好的ui进行渲染这时就会耗费cpu运行时间效率会降低,但使用却不会去渲染整个布局,而是需要时再去渲染,这样就会提高效率。 topbar.xml:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:text="TextView" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/textView" /> </LinearLayout>

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="cn.day.read.MainActivity"> <ViewStub android:layout_width="match_parent" android:layout_height="wrap_content" android:layout="@layout/topbar"/> </RelativeLayout>

MainActivity:

public class MainActivity extends AppCompatActivity { private Button a; private ViewStub stub; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); a= (Button) findViewById(R.id.button); stub = (ViewStub) findViewById(R.id.stub); a.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { View inflateView = stub.inflate(); TextView textView = (TextView) inflateView.findViewById(R.id.textView); textView.setText("hellow shanghai"); } }); } }

这就是常用布局优化,还有就是避免嵌套过多,降低view树的高度

2.性能优化 2.1Android系统内存分配和回收方式 (1)一个APP通常就是一个进程对应一个虚拟机 (2)gc只在heap(堆)剩余空间不够时才发出垃圾回收 (3)前后台切换时有一个ontrimmemory()回调方法用来通知当前app是否处于被系统回收掉的危险 2.2android内存优化方法 (1)频繁使用字符串拼接用stringbuilder (2)ArrayMap、SparseArray替换HashMap (3)避免在OnDraw方法里面执行对象创建 (4)对常量使用static修饰符 (5)使用静态方法,静态方法会比普通方法提高15%左右的访问速度 (6)减少成员变量也就是习惯说全局变量的使用,局部变量会随某个方法的结束而结束,成员变量却和activity生命周期一样 (7)减少不必要的对象,使用基础类型会比使用对象更节省资源 2.3内存泄漏 (1)图片问题,bitmap释放以及优化(网上代码很多) (2)用application context而不是activity context (3)强引用有可能activity结束时还被其他所引用,这时activity销毁时也不会被gc回收 (4)软引用 (softreference)生命周期会被gc回收

性能优化是一个漫长的过程,所以开发过程中需注意这些小的细节。

转载请注明原文地址: https://www.6miu.com/read-32669.html

最新回复(0)