实习期间小问题备忘 1

问题记录

1. Mac 上zip文件加压出现cpgz文件的解决方法:

解压缩zip格式,出现.cpgz文件,循环往复,解决方法

  • 命令行 unzip,但是文件会加压到根目录,不方便;
  • 使用unarchiver第三方解压软件,解压zip即可

2. mac上有些文件的扩展名是隐藏的

比如说txt。

3. 安装apktool

zoezhang@ali-ac87a32d0e28 bin$ sudo chmod +x /usr/local/bin apktool.jar apktool
zoezhang@ali-ac87a32d0e28 bin$ sudo apktool

4. .so文件的安装位置?

  • 最终APK文件中的lib/abi目录中
  • 通过PackageManager安装后,在小于Android 5.0的系统中,.so文件位于app的nativeLibraryPath目录中;在大于等于Android 5.0的系统中,.so文件位于app的nativeLibraryRootDir/CPU_ARCH目录中。

5. 打包失败的问题

androd-gradle-plugin 版本不对

classpath 'com.android.tools.build:gradle:1.5.0'
classpath 'com.alipay.android:android-gradle-plugin:1.5.0.2.6.1'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'

6. 开发环境

分清楚什么是日常、预发、和线上环境;学习哆啦A梦调试工具

7. mac下ping

会一直ping下去,需要按control + C停止

8. instanceof关键字

java二元操作符,作用是测试它左边的对象是否是它右边的类的实例,返回boolean类型。
举例:

public class Bill{}
public class PhoneBill extends Bill{}
public class GasBill extends Bill{}

//传入一个bill对象  一个方法处理两种子类  ----并不推荐的用法
public double calculate(Bill bill){
  if(bill instanceof PhoneBill){
  }
  if(bill instanceof GasBill){
  }
}

在Android中,instanceof关键字常用于在Fragment中getActivity调用Activity方法时,检查所获得的Activity是否是Fragment所attach的Activity,

9. Android 反射技术(引用网上资料):

  • 运用反射我们可以运行时加载、探知使用编译期间完全位置的classes。换句话说,Java程序可以加载在运行时才得知名称的class,获悉其完整构造方法,并生成其对象实体、或对其属性设值、或唤起其成员方法。

  • Java的反射机制是在编译时并不确定是哪个类被加载了,而是在程序运行的时候才加载。使用的是在编译期并不知道的类。这样的编译特点就是java反射。

  • 如果有AB两个程序员合作,A在写程序的时需要使用B所写的类,但B并没完成他所写的类。那么A的代码是不能通过编译的。此时,利用Java反射的机制,就可以让A在没有得到B所写的类的时候,来使自身的代码通过编译。

  • 反射就是把Java类中的各种存在给解析成相应的Java类。要正确使用Java反射机制就得使用Class(C大写) 这个类。它是Java反射机制的起源。当一个类被加载以后,Java虚拟机就会自动产生一个Class对象。通过这个Class对象我们就能获得加载到虚拟机当中这个Class对象对应的方法、成员以及构造方法的声明和定义等信息。

为什么要用反射机制?直接创建对象不就可以了吗,这就涉及到了动态与静态的概念:

  • 静态编译:在编译时确定类型,绑定对象,即通过。
  • 动态编译:运行时确定类型,绑定对象。动态编译最大限度发挥了java的灵活性,体现了多态的应用,降低类之间的藕合性。

一句话,反射机制的优点就是可以实现动态创建对象和编译,体现出很大的灵活性,特别是在J2EE的开发中它的灵活性就表现的十分明显。比如,一个大型的软件,不可能一次就把把它设计的很完美,当这个程序编译后,发布了,当发现需要更新某些功能时,我们不可能要用户把以前的卸载,再重新安装新的版本,假如这样的话,这个软件肯定是没有多少人用的。采用静态的话,需要把整个程序重新编译一次才可以实现功能的更新,而采用反射机制的话,它就可以不用安装,只需要在运行时才动态的创建和编译,就可以实现该功能。它的缺点是对性能有影响。使用反射基本上是一种解释操作,我们可以告诉JVM,我们希望做什么并且它满足我们的要求。这类操作总是慢于只直接执行相同的操作。

  • JAVA的动态加载的机制就是通过ClassLoader来实现的,ClassLoader也是实现反射的基石。ClassLoader是JAVA提供的一个类,顾名思义,它就是用来加载Class文件到JVM,以供程序使用的。

  • 但是问题来了,ClassLoader加载文件到JVM,但是Android是基于DVM的,用ClassLoader加载文件进DVM肯定是不行的。于是android提供了另外一套加载机制,分别为 dalvik.system.DexClassLoader 和 dalvik.system.PathClassLoader,区别在于 PathClassLoader 不能直接从 zip 包中得到 dex,因此只支持直接操作 dex 文件或者已经安装过的 apk(因为安装过的 apk 在 cache 中存在缓存的 dex 文件)。而 DexClassLoader 可以加载外部的 apk、jar 或 dex文件,并且会在指定的 outpath 路径存放其 dex 文件。

10. Fragment

管理回退栈

11. H5和native app

  • native app使用原生系统内核,iOS或者Android,直接在系统上操作,使用API;* H5 app是先调用系统的浏览器内核,相当于是在网页上进行操作,相对原生APP稳定性稍差,速度较慢,但是动态性很强;
  • Weex和React Native

12. Classesloader()的双亲委托模式

for java:

  • classloader:用于加载class文件到JVM,以供程序使用,动态加载的机制就是通过classesloader实现的。
  • classesloader—— bootstrapclassesloader(启动类加载器)
  • 每一个自定义的classloader都必须继承classloader这个抽象类,每个Classloader都会有一个parent Classloader,我们可以看到Classloader中有一个getparent()方法,
    这个方法用来返回当前ClassLoader的parent,注意,这个parent不是指的被继承的类,而是在实例化该ClassLoader时指定的一个 ClassLoader,如果这个parent为null,那么就默认该ClassLoader的parent是bootstrap classloader,这个parent有什么用呢?
    http://www.cnblogs.com/xxbcoder/p/5112632.html

13. Android分发机制

将一个事件传递给一个具体的view去处理的整体流程和机制
Activity ---- ViewGroup ----- View 处理

14. 反射机制

利用反射机制解耦的原理就是动态创建对象,先加载指定的类,再实例化对象。
java反射机制是在运行状态的时候,对于任意一个类,都能够知道这个类的所有属性和方法。
动态获取信息和动态调用对象的方法成为java语言的反射机制。
也就是在程序运行时实例化对象,而我们平时是加载了类之后实例化对象。

Reflection机制允许程序在正在执行的过程中,利用Reflection APIs取得任何已知名称的类的内部信息,包括:package、 type parameters、 superclass、 implemented interfaces、 inner classes、 outer classes、 fields、 constructors、 methods、 modifiers等,并可以在执行的过程中,动态生成Instances、变更fields内容或唤起methods。

string str = 'abcc'  
Class cl = str.getclass()  
Class c2 = Class.forName("java.avt.Buttion")  

15. android 的动态加载之classloader

  • ClassLoad而是所有ClassLoader的最终父类。传入了一个父构造器,默认父构造器为一个PathClassLoader且此PathClassLoader父构造器为BootClassLoader
  • 双亲委派模型
  • 父构造器加载不成功,才会在自己的findclas中进行加载。逻辑尽量写在findclasses中。

16. RecycleView的基本用法

  • 列表页面:RecycleView,Adapter,实现Adapter的getViewType,onCreateViewHolder,onBindViewHolder,还有一些Item操作,绑定,设置对应的LayoutManager。

17. 开源网络框架

  • OKhttp
    一个处理网络请求的开源项目。
    功能:get,post使用,文件上传下载,加载图片,支持回调,返回对象,对session的保持。

18. px和dp

  • px是像素,屏幕上一个物理的像素点,不建议使用,有兼容性问题
  • dp是最常用的尺寸单位,与像素密度密切相关,
    物理尺寸:1.5 2 分辨率 240340
    那么横向包含的像素密度是 240/1.5 纵向包含的 340/2
  • Android 定义了四种像素密度:120dpi,160dpi,240dpi,320dpi
    对应的dp到px的系数分别是0.75,1,1.5,2,这个系数乘以dp长度就是像素数。

19. Android 渐变蒙层

20. Charles

  • mac下常用网络抓包工具,在做移动开发时,为了调试与服务器端的网络通讯协议,需要截取网络封包来分析。
  • charles将自己设置成系统的网络访问代理服务器,所有的网络协议请求都通过它来完成,从而实现网络的封包和分析。

21. Fragment setArgument

创建Fragment对象 new Fragment(),不建议重载构造函数,因为当一个Fragment重新创建的时候,会调用Fragment的默认构造函数,不会调用你重载的构造函数。因此系统推荐使用Fragment.setArgument(Bundle)来传递参数。当Fragment销毁的时候,Bundle会保存下来,重新创建时根据Bundle来重新创建Fragment。

22. Android View中的getViewTreeObserver().addOnGlobalLayoutListener()

  • 获取view的宽度和高度的方法之一,在onCreate中无法获得一个view的高宽,view的组件布局在onResume回调完成,onGlobalLayoutListener是viewTreeObserver的内部类,当一个视图树的布局发生改变时,可以被viewTreeObserver监听到,这个时候注册监听视图树的观察者,在视图树的全局事件改变时得到通知,viewTreeObserver通过getViewTreeObserver获得。
  • onGlobalLayoutListener,当视图树中某个视图可视状态发生改变时,要调用的回调函数接口类。

23. Fragment与Activity的通信 以及 viewpager

  • Fragment可以通过getActivity()方法获取到它所在的Activity的对象,然后可以查找Activity中的控件,Activity可以通过FragmentManager来查找它所包含的Fragment。
  • 事件回调:Activity响应Fragment事件
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,711评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,079评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,194评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,089评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,197评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,306评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,338评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,119评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,541评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,846评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,014评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,694评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,322评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,026评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,257评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,863评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,895评论 2 351

推荐阅读更多精彩内容