小笔记

作者: SHERLOCKvv | 来源:发表于2018-02-07 19:47 被阅读0次

    笔记一:

    平时放图片的时候我们尽量压缩一下再放入到mipmap文件夹中,对减少我们APK的大小多少有点用处,嘿嘿~
    虽然这个活是UI同学的...对吧

    有个图片压缩的网站挺好用的,推荐用一下:

    压缩图片


    笔记二:

    项目中进行延时操作,
    出现Thread.sleep的,最好使用Handler.postDelayed替换掉
    ①究其原因,Thread.sleep它是让线程挂起,然后到点唤起响应。
    它的不好之处在于:它会占用系统的线程资源,使用这种方式在实现延时操作本身就是一种性能的浪费。如同占着茅坑不拉屎!线程是一种十分宝贵的资源,创建,销毁,切换 都是相当耗性能的。

    当sleep的时候,就等于说:现在我不用,但是你也别想用。你要用?自己去创建一个Thread。

    有的人说,Sleep的时候不占用CPU啊!对,是不占用CPU ,但是占着线程资源,阻碍系统的线程调度!
    这里引用一段关于Thread的文章:

    Threads are a limited resource, they take approximately 200,000 cycles to create and about 100,000 cycles to destroy. By default they reserve 1 megabyte of virtual memory for its stack and use 2,000-8,000 cycles for each context switch. This makes any waiting thread a huge waste.

    可以参考下这文章:
    为什么要放弃使用Thread.Sleep

    ②.Handler.postDelayed
    放弃使用Thread.sleep,那就得找个方法替代它。
    我们项目中使用的是Handler.postDelayed来替换。
    因为....我叙述一遍Handler.postDelayed的流程你就知道了,人家就不是占着茅坑不拉屎的方式:
    (1):postDelay()一个10秒钟的Runnable A,消息进队,MessageQueue调用nativePollOnce()阻塞,Looper阻塞;
    (2):紧接着post()一个Runnable B,消息进队,判断现在A时间还没到,正在阻塞,把B插入消息队列的头部(A的前面),然后调用nativeWake()方法唤醒线程;
    (3):MessageQueue.next()方法被唤醒后,重新开始读取消息链表,第一个消息B无延时,直接返回给Looper;
    (4):Looper处理完这个消息再次调用next()方法,MessageQueue继续读取消息链表,第二个消息A还没到时间,计算一下剩余时间(假如还剩9秒)继续调用nativePollOnce()阻塞,直到阻塞时间到或者下一次有Message进队;

    详细过程看过来:
    你真的懂Handler.postDelayed()的原理吗?

    笔记三

    ManifestPlaceholders - 动态配置AndroidManifest
    我在做项目的时候,有一个需求点,就是靠短信里面的Url来启动APP,本来是个挺简单的需求。但是后端给的Url有点不一样,给了两个:

    1、https://tklife.mobile.taikang.com/app?sxt_uri=https%3a%2f%2fw.url.cn%2fs%2fArM0bZt
    2、tk://tklife/app?sxt_uri=https%3a%2f%2fw.url.cn%2fs%2fArM0bZt
    

    第一个Url是直接短信可以启动APP,这个很好实现,只要在AndroidManifest里需要启动显示的Activity注册代码里面添加个intent-filter:

    <activity android:name="com.taikang.app.wishinsure.WishinMainActivity">
        <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="tklife.mobile.taikang.com"
                android:pathPrefix="/app"
                android:scheme="https"/>
        </intent-filter>
    </activity>
    

    关键代码在data

    未完待续

    相关文章

      网友评论

          本文标题:小笔记

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