Android开发基本常识及技巧

    xiaoxiao2021-03-25  90

    在平时的开发中,总免不了有些一定需要做的事情,且很容易掉到坑里:

    1,按照如下方式使用本地的aar文件

    dependencies { compile(name:'你的aar文件的名称', ext:'aar') } repositories{ flatDir{ dirs 'libs' //aar包的目录 } }

    2,引入libs so文件

    android{ sourceSets{ //引入libs so文件 main{ jniLibs.srcDir(['libs']) } } }

    3,使用 Handler 替代 TimerTask,TimerTask容易造成ANR及非法的状态异常(任务的状态的改变状况).则需要使用new Handler().postDelayed(Running,times)来解决

    4,使用 Vectors 替代 PNG,如果你 确实 要用png, 可以使用 TinyPNG (熊猫大法压缩)压缩.

    5,使用proguard混淆配置

    buildTypes { release { // 不显示Log buildConfigField "boolean", "LOG_DEBUG", "false" //开启代码混淆 minifyEnabled true // 移除无用的resource文件 shrinkResources true //移除无用的资源文件 zipAlignEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' signingConfig signingConfigs.release //使用上述签名信息 } }

    6,不要用Intent传递大量的数据,这有可能导致ANR或者报异常;尽量使用Bundle来携带大数据

    7,在改动JNI后,运行程序之前记得卸载掉已经安装在模拟器或者真机上的该程序,如果直接运行,android不会load最新编译的so,也就不能立即看到修改后的效果;

    8,使用文件流、Cursor时,使用结束后记得一定要关闭,否则可能导致内存泄漏,严重的情况可能引发程序崩溃;

    9,使用 ndk 的时候注意自己分割 abi

    defaultConfig { multiDexEnabled true //打开分包,避免文件方法超过65535个方法,产生异常,同时指出分包的大小 ndk { //设置打包时需要打包的so文件 abiFilters 'armeabi', 'arm64-v8a', 'armeabi-v7a''x86' //表示所有的平台都支持安装 } } dexOptions { //设置分包大小 javaMaxHeapSize "4g" }

    10,对于需要横竖屏转换的应用,又不想在横竖屏切换的时候重新跑onCreate方法,可以在AndroidManifest.xml文件中对应的 Activity标签下调用“android:configChanges=”screenSize|orientation|keyboardHidden””;

    11,为了减轻应用程序主进程的内存压力,对于耗内存比较多的界面(比如视频播放界面、flash播放界面等),可以在AndroidManifest.xml 文件中对应的Activity标签下调用“android:process=”.processname””单开一个进程,但在退出这个界面的时候一定要 在该界面的onDestory方法中调用System的kill方法来杀掉该进程;

    12,多点触控–通过为application、activity自定义主题的方式来关掉多点触摸功能,只需要在自定义的主题下添加这两个标签:

    <item name="android:windowEnableSplitTouch">false</item> <item name="android:splitMotionEvents">false</item>

    13,给Application或者activity设置自定义主题时,最好不要设置为全透明,否则在activity按Home键回退到桌面的时候效果很渣;

    14,最好不要再activity的onCreate方法里面调用popupwindow的show方法,有可能由于activity没有完全初始化导致程序异常(android.view.WindowManager$BadTokenException: Unable to add window – token null is not valid),如果非要在一进activity就显示popupwindow,建议用handler.post、View.postDelay来处理;

    15,对于自定义View,在构造方法里面是获取不到视图的宽高的(此时获取长宽都为0),需要在onMeasure方法中或者跑了onMeasure方法后才能够获取到视图的宽高,不过你可以通过在构造方法里面强制测量视图的宽高来实现在构造方法里获取视图的宽高信息

    16,获得LayoutInflater实例的三种方式: //调用Activity的getLayoutInflater() 16-1,LayoutInflater inflater = getLayoutInflater(); 16-2, LayoutInflater localinflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); //使用的最频繁的 16-3, LayoutInflater inflater = LayoutInfalter.from(context);

    17,TextView的属性技巧: 17-1:android:autoLink设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接。可选值(none/web /email/phone/map/all) 17-2:android:textAppearance设置文字外观。如 “?android:attr/textAppearanceLargeInverse”这里引用的是系统自带的一个外观,?表示系统是否有这种外观,否则使用默认的外观。

    以上!是总结大牛的技术点,欢迎补充!

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

    最新回复(0)