㈠ 每日一问(十三)栈,堆,方法区分别存放哪些变量
堆区:
1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)
2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身 。
栈区:
1.每个线程包含一个栈区,栈中只保存基础数据类型的值和对象以及基础数据的引用
2.每个栈中的数据(基础数据类型和对象引用)都是私有的,其他栈不能访问。
3.栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。
方法区:
1.又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。
2.方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。
㈡ Android常见知识点
跳槽无非就是钱少了或不爽了,无论怎么样,记住:
不要裸辞!
不要裸辞!
不要裸辞!
为什么呢?
1、裸辞就没有钱拿了,还不如骑驴找马。
2、裸辞之后如果一个月内没有找到工作,那么社保就会断了,除非你自己找渠道交了。
3、裸辞之后真的会很颓废!
当初还在上班的时候就想着,裸辞了,首先花几天时间吧简历完善一下,把知识点恶补一下,然后投简历,面试,妥妥的妥妥。
结果呢?每次裸辞之后都是:
首先躺尸一个星期;
然后用了一个星期才慢吞吞的改完简历;
然后海投,没回复,修改简历;
再次海投,面试,被虐得体无完肤,怀疑人生;
再改简历,再海投,一不小心中了。
当然海投也是有个目标范围的。
如果不是裸辞,那么现在应该还是在公司上班,在完成工作之余,就会逼着自己复习知识点了,起码不会在家堕落。在家不上班就是睡觉、看电影,樯橹灰飞烟灭,所以不要裸辞。
然并卵,我依然裸辞了。请假面试真的很烦。
onPause,假如从ActivityA启动B,如果B是透明的,则不会回调A的onStop方法。
方法一:
方法二:
1、写好动画文件 R.anim.enter 、 R.anim.exit
2、调用 overridePendingTransition 设置动画
引申:如Activity设置为singleInstance,则应该怎么设置跳转动画?
1、 startService 启动方与Service并没有关联,只有当Service调用 stopSelf 或者其它组件调用 stopService 的时候服务才会终止。
2、 bindService 启动方绑定Service,并且可以通过Binder与之交互,当启动方销毁时,也会自动unbindService,当所有启动方都unbindService之后,Service也就自动销毁了。
为什么呢?官方文档是这样写的:
大概意思是 onReceive() 执行完毕之后,它所在的进程就会变成低优先级进程,极易被系统杀死。
分两种情况分析一下:
一、收到广播的时候,应用正在运行:
此时如果没有在Manifest中设置了独立进程,则 onReceive() 就直接在主进程主线程执行,这里很明显不能执行耗时操作。
二、收到广播的时候,应用没有启动:
这时候系统会启动一个进程去执行 onReceive() ,(如果Manifest中没有设置进程名,则进程名为包名),(插一句,所有进程都会创建一个Application实例),当onReceive执行完毕之后,此进程就变成低优先级了,随时有可能被系统杀死,如果你在onReceive里面启动了线程执行耗时任务,那很有可能子线程没执行完毕,进程就被杀死了,进程没了,线程自然就挂了。
那么确实要执行耗时操作呢,怎么办?
方法一:goAsync()
方法二:schele a JobService from the receiver using the JobScheler
三种实现方法
1、继承现有的组件,如TextView等,进行拓展。
2、继承ViewGroup,自定义布局。
3、继承View,在onDraw()中描绘。
onMeasure()
onLayout()
onDraw()
其它
attachToRoot 从字面理解就是是否绑定到 root 上面去了。
1、 attachToRoot=true :则返回的view为root的子view;
2、 attachToRoot=false :则返回的view是个单独的view,传入的root只是提供一些参数给view使用而已。
那么这里不传入 attachToRoot 呢?那就看root是否为空了,如果传入root不为空,则默认绑定到root,作为root的子view返回。
也就是所谓的Frame动画。指通过指定每一帧的图片和播放时间,有序的进行播放而形成动画效果。
可以通过插入器 Interpolator 控制动画的变化速度。
也就是所谓补间动画。指通过指定View的初始状态、变化时间、方式,通过一系列的算法去进行图形变换,从而形成动画效果,主要有 AlphaAnimation 、 TranslateAnimation 、 ScaleAnimation 、 RotateAnimation 四种。
注意:只是在视图层实现了动画效果,并没有真正改变View的属性。
属性动画,通过不断的改变View的属性,不断的重绘而形成动画效果。相比于视图动画,View的属性是真正改变了。
注意:Android 3.0(API 11)以上才支持。
最常用的类有 ObjectAnimator
P.S. 我不明白cancel存在的意义。
另外, DialogFragment 是没有cancel的。
ping
内存大致分为三个区:栈区、堆区、方法区。
栈区
堆区
方法区
JAVA不允许手动释放内存,只能通过垃圾回收程序不定期对那些不再被引用的对象进行回收。
那么怎么判断哪些对象需要回收?
1、引用计数法
就是给对象添加一个引用计数器,引用对象时+1,引用失效时-1。但是这种方法解决不了对象相互引用的情况。
2、可达性分析法
通过一系列“GCRoots”对象作为起点进行搜索,当GCRoots和一个对象之间没有可达路径,则认为此对象不可用,但是不可用不一定会成为可回收对象。
编写AIDL文件,定义接口。
编译生成JAVA文件。
定义进程级Service,onBind中返回Interface.Stub()。
onServiceConnected中Interface aidl = Interface.Stub.asInterface(service);
把已修复的class文件打包成dex文件,网络传输到用户手机中,利用类加载器把这些类加载到类队列的前面即可。
【未完待续】
如果公司录用我,不管是三年还是五年,首先我都会先把公司的任务做好,然后不断深入研究Android的相关技术,特别是Android源码,了解Android底层原理,以便更好的优化性能,避免一些不必要的奇葩问题,还有就是研究一些新的框架的原理,学习别人的思维。最后就是学习周边语言,比如后台,前端等等。