Android 小知识

作者: 老林不跌面儿 | 来源:发表于2017-12-29 11:33 被阅读2次

    以下内容是针对 纳兰寒明 发布 《android 小知识 1》 和 《android 小知识 2》文章做了更改,内容会不断补充更新,也欢迎你的留言补充。

    1.FragmentActivity与Activity的区别

    FragmentActivity 继承自 Activity,是去解决 Android3.0之前没有fragment 的 api 的问题,在3.0后,其与 Activity 的功能是一样的。

    FragmentActivity 的使用

    在android3.0之前:getSupportFragmentManager()

    在android3.0之后:getFragmentManager()

    2.MediaType的使用

    Internet Media Type ,互联网媒体类型,也叫 MIME 类型,在 Http协议消息头中,使用 Content-Type 来表示具体请求中的媒体类型信息,使用两部分的标识符来确定一个类型

    例如:application/json:json 格式
    application/xxx:xxx格式

    3.Pattern和Matcher

    两个均属于java中正则表达式类,

    4.@suppressLint(“NewApi”)的意义

    该代码经常出现在类之前,其存在的目地是屏蔽Android lint错误,在使用当前的 Android版本中高于android:minSdkVersion时使用,避免编译器警告。

    5. 3DES和Base64的说明

    3DES是三重DES加密,对于DES来说,当前科技可以暴力破解,而3DES是将其进行三重DES加密,这样可以延长暴力破解的时间.

    Base64是用于传输8bit字节代码的编码方式之一。

    6.linux中文件系统

    • 第一个字符表示文件类型:

    'd',目录
    'l',软链接
    'b',块设备
    'c',字符设备
    's',socket
    'p',管道
    '-',普通文件

    • 最后一个字符:

    'r',表示允许读权限
    'w',表示允许写权限
    'x',表示允许执行权限

    7.Butterknife框架

    view 注入框架,减少大量的 findViewByIdsetOnClickListener,可视化一键生成

    8.res和asset区分

    res下为可编译的资源文件

    assets下为原生资源文件,不会被R.文件编译,加载这些原生资源,需要调用其方法。

    9.WebView属性信息:

     webView.getSettings().setSupportZoom(false);//设置WebView是否支持使用屏幕控件或手势进行缩放,默认是true,支持缩放。
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {//判断版本大于17
                webView.getSettings().setMediaPlaybackRequiresUserGesture(false);//设置WebView是否通过手势触发播放媒体,默认是true,需要手势触发。
            }
            webView.getSettings().setBuiltInZoomControls(true);//设置WebView是否使用其内置的变焦机制,该机制集合屏幕缩放控件使用,默认是false,不使用内置变焦机制。
            webView.getSettings().setDisplayZoomControls(false);//设置WebView使用内置缩放机制时,是否展现在屏幕缩放控件上,默认true,展现在控件上。
            webView.getSettings().setAllowFileAccess(false);//设置在WebView内部是否允许访问文件,默认允许访问。
            webView.getSettings().setAllowContentAccess(true);//设置WebView是否使用其内置的变焦机制,该机制结合屏幕缩放控件使用,默认是false,不使用内置变焦机制。
            webView.getSettings().setLoadWithOverviewMode(false);//设置WebView是否使用预览模式加载界面。
            webView.getSettings().setSaveFormData(false);//设置WebView是否保存表单数据,默认true,保存数据。
            webView.getSettings().setTextZoom(100);//设置WebView是否保存表单数据,默认true,保存数据。
            webView.getSettings().setUseWideViewPort(false);//设置WebView是否使用viewport,当该属性被设置为false时,加载页面的宽度总是适应WebView控件宽度;当被设置为true,当前页面包含viewport属性标签,在标签中指定宽度值生效,如果页面不包含viewport标签,无法提供一个宽度值,这个时候该方法将被使用。
            webView.getSettings().setSupportMultipleWindows(true);//设置WebView是否支持多屏窗口,参考WebChromeClient#onCreateWindow,默认false,不支持。
            webView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm l);//设置WebView底层的布局算法,参考LayoutAlgorithm#NARROW_COLUMNS,将会重新生成WebView布局
            webView.getSettings().setStandardFontFamily("sans-serif");//设置WebView标准字体库字体,默认字体“sans-serif”。
    
    

    更多 webview属性信息访问http://teachcourse.cn/android-webview-websettings

    另外,webview 中存在js的弹窗显示,需要手动添加,webview 并不能处理js的弹窗,http://blog.csdn.net/mchenys/article/details/49930739

    10.获取手机信息:

     //获取手机信息
            TelephonyManager telephonyManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
            String imei = telephonyManager.getDeviceId();
            String mtype = Build.MODEL;//手机型号
            String mrelease = Build.VERSION.RELEASE;//系统版本号
            String phone_company = Build.BRAND;//手机厂商
    
    

    详见:http://blog.csdn.net/hytfly/article/details/8552483

    11.TextSwitcher:

    设置文本滚动,交换textview文本信息的

    12. Apk打包:

    1)Android 系统要求所有的app文件在 android 手机上都需要打包,所以系统默认自动给应用程序签名,ADT 会自动使用 debug 密钥为应用程序签 名,debug 密钥是一个名为debug.keystore 的文件,位置位于电脑的:

    /kang/.Android/debug.keystore,其中的kang是电脑的用户名。

    2)在使用百度地图中需要apk的签名中的SHA1序列,可以找到debug.keystore的位置,使用dos命令输入:

    keytool -v -list -keystore debug.keystore

    密码默认为android,即可获取debug签名的SHA1序列,但是记得要在百度地图中添加开发版本的签名的SHA1的序列,如果签名不同,记得在百度地图控制台更换SHA1的序列,保证app正常使用。

    3)在打包中keytool生成的mykey.keystore 包括公钥、私钥和证书。

    make_key通过调用openssh生成公钥和私钥,所以生成.x509.pem和.pk8的密钥对。当你获取到.x509.pem和.pk8的密钥对时,查看此网页就可以获取到SHA1序列。http://blog.csdn.net/s_targaze_r/article/details/50739802

    13.EditText.addTextChanged:

    editText.addTextChangedListener(new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                    //输入前
                }
    
                @Override
                public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                    //输入中
                }
    
                @Override
                public void afterTextChanged(Editable editable) {
                    //输入后
                }
            });
    
    

    14.url中的&

    在与服务端进行数据交互的过程中,通常会使用到url,这里面存在一个url中&符号的问题。在url中会经常出现url转义出错的问题,&为&所以在传输过程中最好将url转义正确传输,在服务端也要正确接收。

    String url_encode = "";
                    try {
                        url_encode = URLEncoder.encode(url,"utf-8");
                    } catch (UnsupportedEncodingException e) {
                        e.printStackTrace();
                    }
    
    

    这里url_encode就是处理过的url保证传输不出错。

    15.webview网页链接唤醒app

    <intent-filter>
                    <action android:name="android.intent.action.VIEW" />
    
                    <category android:name="android.intent.category.DEFAULT" />
                    <category android:name="android.intent.category.BROWSABLE" />
    
                    <data
                        android:host="www.baidu.com"
                        android:scheme="http" />
                    <data
                        android:host="www.baidu.com"
                        android:scheme="kang" />
    
                </intent-filter>
    
    

    网页唤醒app不止要在app中的Mainfest里面进行更改,还要在网页链接中进行更改,app只负责接收对应的<data/>数据就可以唤醒,在目前版本,我试验了自定义的scheme为kang,kang://www.baidu.com就可以实现app的唤醒,而http://www.baidu.com使用的7.1.0版本无法实现,但是4.4.4版本网页打开就可以实现,这个可能和android的版本有关。

    另外:微信中屏蔽了scheme跳转,所以一搬都是用手机游览器打开才能唤起app,另外一些手机游览器也无法做到。

    16.热更新和冷更新

    • 热更新:所谓热更新就是指代码可以不通过重新打包提交AppStore的方式来更新客户端的执行代码。

    • 冷更新:则与热更新相反,必须通过AppStore审核才可以更新客户端版本。

    目前:ios是禁止热更新的,可能是为了安全性的考虑,为用户营造一个良好的使用环境。
    Android 可以考虑使用微信 Tinker 、 阿里 Sophix。

    17.isTaskRoot()

    判断本 Activity 是否在栈底,或者是否是第一个 Activity。

    18.App安装冲突

    文件包与具有统一名称的现有文件包存在冲突:

    1. ID相同,但签名不同的应用
    2. 手机上装过其他版本的该应用

    19.防止 Apk 被反编译

    Android studio混淆代码:

    在build.gradle中设置 minifyEnabled true,就会激活apk的代码保护功能,反编译后难以查看代码

    相关文章

      网友评论

        本文标题:Android 小知识

        本文链接:https://www.haomeiwen.com/subject/lkligxtx.html