PROCEDURE-201701

    xiaoxiao2021-03-26  23

    Drawable可以通过Drawable.createFrom从文件里面生成一个Drawable对象(不过应该没有进行图片处理,缩放等)StateListDrawable可以用来作为Drawable,不过是一个可以根据state变的,就相当于xml里面的drawable selector。ColorStateColorList是一个color的selector

    2017年01月04日23:23:48 2


    安卓里面Drawable.createFrom直接从文件中获取然后setImageDrawable显示的大小通常相对于在xml里面引用的小很多,如果用BitmapDrawable(getResources,Drawable.createFromXX)这个来进行setImageDrawable就可以了。因为Drawable.createFrom没有根据安卓设备进行处理。Android里面EventBus在context间传递消息很有用,可以省去保存context对象的麻烦。color是十六进制,要想通过string保存可以Integer.toHexString(从xml里面获取的color).

    2017年01月05日18:08:39 3


    java ZipFile解压zip文件,用到的zipEntry中的Enumeable.getNext那个方法依次返回的是zip文件里面的压缩file(directory或者file),例如/asd/asd2/asd.json,通过getNext获得的第一个是/asd目录,第二个是/asd/asd2目录,第三个才是/asd/asd2/asd.json文件。所以可以挨个解压文件不用考虑递归。

    2017年01月06日23:34:21 1


    jvm的类加载(class loading) load。把.class文件格式的东西读取(可以通过网络等方式,不局限于.class文件)verify。校验文件输入流格式/字节码正确性/符号引用正确等。resolve。将符号引用转化成实际的JVM中的内存的直接饮用。例如类/接口方法,属性,常量等,进行内存空间的分配。上面三个是<连接link>过程initialize。完成<clinit>(),即class里面的static语句以及类变量的初始赋值。initialize在第一次new/使用到类的static变量/使用类的static方法时候必须进行。类加载器。不同的类加载器加载同一个类得到两个名字一样的class,两个class调用==也是不一样的,包括instanceOf/equals等判断。因为两个类相同的前提就是同一个类加载器加载的类加载器有一个“双亲委托方式Parents Delegation Method”,主要就是sub类加载器加载的时候先调用parent 类加载器进行加载,失败了再自己加载,这样做可以保证一些类不会重复加载(类加载器最底层(父子关系最爷爷辈的)加载器加载java基础包中的类,然后次一级的加载classPath的,再次一级加载自己指定的类……,大概意思如此,不一定准确)。获取一个网站的时间,可以用URL连接那个网站,然后获取返回的头部的date信息。popUpWindow可以用来做蒙版。popUpWindow设置contentView,然后制定显示在屏幕的什么坐标。living is good

    2017年01月09日21:52:50 6


    JVM的栈帧-stack frame 每个stack frame 对应一个方法,主要包含方法的本地变量表/动态链接/返回地址local variable table 包含了栈帧用到的本地变量的空间。方法里面变量空间可以根据变量的生存域进行复用(这里会对gc有一定的影响,不过通常jit会优化这部分代码取消这种影响)v.requestlayout可以用v.forcelayout;v1.requestlayout来实现。区别是后者只会有一次重新对view树的layout,但是可以把执行了forcelayout的所有view都做layout(forcelayout是一个标记函数,在下一次layout bypass(类似于全局更新信号)的时候对该view重新layout。)

    2017年01月10日20:52:21 3


    JVMstack frame 操作数栈,JVM通过栈来进行数据运算JVM运行代码的时候方法的解析(method resolution)有静态(通过参数类型确定重载overload方法,同一类内的不同方法)和动态(通过方法的调用者确定override方法,父类子类的同一方法)之分。viewGroup的clipChildren属性可以用来使子view超出父view控件

    2017年01月11日21:13:30 2


    JVM里面代码执行有解释/编译两种类型(编译指的是字节码编译成机器码)android view 的measure过程 Created with Raphaël 2.1.0 start parent传递给子view自己的measuredSpec(包含specMode和specSize的) 子view根据parent的:返回有三种:EXACTLY+SIZE(子view是指定大小);AT_MOST+SIZE(子view是wrap_content,表示最大用这么多,如果parent的不够了,就分配少点);AT_MOST+SIZE(前两种是子view的size,这个是parent传进来的size,表示parent多大我就要多大) parent根据子view的返回进行布局。 end RelativeLayout即使clipChildren=false,如果children measure的时候是wrap_content,那么就会把children压缩到剩余空间那么大,并不会直接让view超出relativelayout,但是如果是指定大小的,Relativelayout就不会压缩view了,所以弄一个指定大小的LinearLayouy里面放view,就可以实现RelativeLayout里面的view clipChildren了。

    2017年01月12日21:04:40 5


    jvm的类加载还挺复杂tomcat/OSGi什么的,不懂android动态加载类不能用classLoader,要用dexClassLoader/pathClassLoader,因为ClassLoader在android里面是阉割版的,没有实现。android app的“皮肤”功能可以通过下载apk包动态加载apk资源来实现,当然也可以下载文件然后通过文件流读取,不过似乎性能不够好。android的”加固” 需要源apk(实际产品apk)/壳apk(用来解开源apk的)/加壳程序。加壳程序可以用java写,也可以用别的语言python什么的。主要是通过源dex和壳dex构建一个新的dex,并且规范其格式符合dex文件格式。加壳程序构建新的dex的时候,会把源dex的byte流加密,这样就可以防止反编译直接获得源dex了。因为没有解密程序是没办法解密的。而解密程序是在壳dex里面的,所以如果源码阅读能力够强,还是能解密的,不过没那么直接了,一个命令就得到dex。打开加壳后的apk时,壳dex会解密并动态加载源dex,然后看起来好像正常启动一样。具体的动态加载过程之后在了解并实践。

    2017年01月13日18:24:21 5


    javascript date new Date().valueOf()获取number时间戳new Date(yyyy,mm,dd,HH,MM,SS),参数为number,月0-11,日1-31。js里正则表达式获取匹配结果以及匹配到的内容的方式 var str=""; var reg=/regex/g; var matched = false; str.replace(reg,function(){ matched = true;//matched callback here,arguments[1-...]is the content captured } //following code android 的clipChildren属性在android4.1.1上面会有问题,因为在view发生改变(例如滚动)的时候,超出父控件的view还是会被clip。android获取系统版本进行判断 String s = android.os.Build.SDK; int s = android.os.Build.SDK_INT; int jelly_bean = android.os.Build.JELLY_BEAN;

    2017年01月16日18:20:33 2


    null

    2017年01月17日22:12:09 0


    jvm解语法糖 自动装箱/拆箱。整数的cache,Integer的-128~127是缓存的。整数的比较,整数的equals与整数的==在类型相同(都是Integer)的时候是等价的。泛型。编译后直接为泛型类型然后通过object强制转换为指定类型,而不是具体的泛型类型。所以下面的代码不能通过编译,因为在编译器看来,两个函数完全一样了,参数都是List<>。 private void f1(List<String> arg){} private void f2(List<Integer> arg){} android的apk签名,使用jarsigner(需要keystore)/signapk(需要x509/p什么)进行签名。keystore和x509/p什么 可以相互转化。 签名了以后,apk里面有一个文件manifest.mf保存了apk所有文件的校验值,cert.sf保存了manifest的校验值,cert.rsa保存了私钥进行的cert.sf的数字签名和公钥信息用来进行校验,公钥私钥来自于keystore。那么问题来了,为什么不直接manifest.rsa呢?为什么多了一步cert.sf呢?文件大小的原因吗?

    2017年01月21日23:02:20(for 1.20) 4


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

    最新回复(0)