但是试了好多方法,也参考了网上的很多做法,隐藏安卓底部导航栏之后 弹出dialog或者popupwindow后,导航栏会再次显示出来,虽然可以设置在dialog的onStart中再次隐藏导航栏,但是会出现一个导航栏显示出来又马上隐藏掉的一个效果...这样会很影响体验,会闪一下虚拟栏再隐藏,或者隐藏了再显示回来。 经过一连串的尝试摸索,找到了个目前认为是见到过的最优解的方法。 如果谁有更好更简单的实现,欢迎留言,共同学习学习。...在Activity中隐藏状态栏,要在setContentView(R.layout.activity_main)之前调用。 而Dialog中,需要在dialog.show()方法之后去调用。...在Activity中,虽然在setContentView(R.layout.activity_main)之前调用隐藏状态栏的代码,但是一旦Activity跳转,就又出来了, 解决办法是在隐藏状态栏逻辑代码的下面.../隐藏虚拟按键,并且全屏 if (Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) { // lower api
这些Variables会使用默认的Java值 - null(引用类型)、0(int)、false(boolean)等等,直到调用setter时。...~ 移位 >> >>> << 比较 == > = <= instanceof 分组 () null Cast 方法调用 数据访问 [] 三元运算 ?...- 左边的对象如果它不是null,选择左边的对象;或者如果它是null,选择右边的对象: android:text="@{user.displayName ??...例如,在表达式@{user.name}中,如果user是null,user.name会赋予它的默认值(null)。如果你引用user.age,age是int类型,那么它的默认值是0。...5.1 Observable 对象 实现android.databinding.Observable接口的类可以允许附加一个监听器到Bound对象以便监听对象上的所有属性的变化。
在ArrayAdapter中,我还可以用setTag()的方式,保存条目中具体视图元素的引用,从而减少使用findViewId()方法的次数。这也能提高应用的运行效率。...setTag()用于把对象“粘附”在某个视图元素上。...当convertView被重复利用时,粘附于其上的两个视图元素的引用也会被重复利用,从而减少了调用findViewById()进行检索的次数。...在if(convertView == null)的结构中可以看出,如果条目被重复利用,粘附在条目上的Holder对象将借助getTag()方法取出。...我们可以重复利用该Holder对象中包含的两个TextView引用,从而减少了findViewById()的调用次数。
上一讲说明了数据库中存取数据的方法。这一讲将以条目的视图方式,来以相似的视图方式,显示多个数据对象。这种方式特别适合于显示从数据库中取出的多个结构相似的数据,比如多个联系人,或者多个联系人分类。...setTag()用于把对象“粘附”在某个视图元素上。...当convertView被重复利用时,粘附于其上的两个视图元素的引用也会被重复利用,从而减少了调用findViewById()进行检索的次数。...在if(convertView == null)的结构中可以看出,如果条目被重复利用,粘附在条目上的Holder对象将借助getTag()方法取出。...我们可以重复利用该Holder对象中包含的两个TextView引用,从而减少了findViewById()的调用次数。
, int type)的方法 ,该方法体由一个switch语句根具type的值创建并返回不同类型的View。...模式下,这很有用,比如,你在listView上看到了一个failedView,表明该位置position创建View失败了。...接下来,我们来看process方法。process方法可能会被apt工具多次调用,,apt初始化的时候,会调用一次process方法。...在第一次调用时,apt编译器会将整个工程作为输入,收集到所有被ViewType注解的元素,然后同过process方法的参数annotations传递给process方法处理。...,则会尝试通过ClassName这个类的bestGuess方法,这个方法接受一个字符串failedViewName,返回一个ClassName failedView,failedView完整的描述了failedViewName
有了生命周期,我们在onActivityResumed里面记录一下开始时间,然后在onActivityPaused中获取当前时间,就是整个页面的浏览时间; 在生命周期方法中是有activity对象的,这样也可以拿到全路径作为唯一标示...的时候我们调用了一下trackAppViewScreen方法,并传入当前activity,来看看trackAppViewScreen方法。...方法中创建了JSONObject对象properties,用来添加我们需要埋点的数据,比如页面的唯一标示key我们用activity表示,并取全路径作为value。...中判断显示与否进行埋点,自定义数据,然后调用track方法进行埋点。...中初始化代理方法, 在onActivityResumed中添加代理事件, 在onActivityStopped中移除代理事件。
在android中应用相机功能,一般有两种:一种是直接调用系统相机,一种自己写的相机。...当然网上还有一些其他相关的调用方法,只要设置对了action,那么系统就会调用系统自带的相机....数据的接口,他分别必须实现3个方法 surfaceCreated()这个方法是surface 被创建后调用的 surfaceChanged()这个方法是当surfaceView发生改变后调用的...注意,当调用camera.takePiture方法后,camera关闭了预览,这时需要调用startPreview()来重新开启预览。..."/> (7)能够拍照了,这下子要考虑如何让图片更好看了,这显然是专业人士的强项,但是我们在程序上,也可以做一些处理, 向上面的那些,因为我直接把surfaceView当做整体布局,就可能出现屏幕被拉开了
public static final int value = 123; 4. 解析 将常量池的符号引用替换为直接引用的过程。...” } static int i = 1; } 与类的构造函数(或者说实例构造器 ())不同,不需要显式的调用父类的构造器。...虚拟机会自动保证在子类的 () 方法运行之前,父类的 () 方法已经执行结束。...最常见的生成这4 条指令的场景是: new 关键字实例化对象; 读取或设置一个类的静态字段(被final修饰、已在编译期把结果放入常量池的静态字段除外)的时候; 调用类的静态方法。...SuperClass[] sca = new SuperClass[10]; 使用常量:常量在编译阶段会存入调用类的常量池中,本质上并没有直接引用到定义常量的类,因此不会触发定义常量的类的初始化。
类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口 在加载阶段,虚拟机需要完成以下3件事情: 通过一个类的全限定名来获取定义此类的二进制字节流...二进制字节流就按照虚拟机所需的格式存储在方法区之中, 而且在Java堆中也创建一个java.lang.Class类的对象,这样便可以通过该对象访问方法区中的这些数据 加载时机 当应用程序启动的时候,所有的类不会被一次性加载...例如,A a=new A(), 一个类真正被加载的时机是在创建对象的时候,才会去执行以上过程,加载类。当我们测试的时候,最先加载拥有main方法的主线程所在类 Java虚拟机有预加载功能。...解析:虚拟机将常量池中的符号引用替换为直接引用(内存地址)的过程 解析阶段是虚拟机将常量池内的符号引用替换为直接引用的过程,解析动作主要针对类或接口、字段、类方法、接口方法、方法类型、方法句柄和调用点限定符...init: 在实例创建出来的时候调用,也就是构造函数,包括: new操作符 普通代码块 调用Class或java.lang.reflect.Constructor对象的newInstance()方法;
消息队列MessageQueue对象在什么时候创建? 在Looper的构造方法中创建,只要new Looper对象,就会附带new MessgaeQueue对象。...是的,在Handler的构造方法中,一定会将Handler对象里的引用指向Looper对象里的消息队列对象,所以共用一个消息队列对象。 Handler和Looper关联吗?...r(Runnale对象),post开头的方法都会调用sendMessage开头的方法,传入之前都会调用getPostMessage方法。...这个recycleUnchecked方法在MessageQueue.removeMessages()和Looper.loop()方法中都会有调用。...、软引用、弱引用、虚引用的概念 WeakReference弱引用,与强引用(即我们常说的引用)相对,它的特点是,GC在回收时会忽略掉弱引用,即就算有弱引用指向某对象,但只要该对象没有被强引用指向(实际上多数时候还要求没有软引用
调用ListView对象的setOnItemClickListener()方法,设置条目的点击事件,参数:OnItemClickListener对象 使用匿名内部类实现,重写onClick()方法,传递进来的参数...:ListView,当前View,position,id 根据索引位置把当前这条电话号码传回去 调用List对象的get()方法,得到Map,调用get(key)方法,得到这条电话 调用setResult...()方法,返回去数据,参数:响应码,Intent对象 获取Intent对象,new出来 调用Intent对象的putExtra(key,val),把电话放进去 调用finish()方法关闭当前页面 开启这个的...activity使用的是startActivityForResult() 重写onActivityResult()方法,传递进来Intent对象 判断Intent对象是否为null 调用Intent对象的...getStringExtra()方法,获取到电话号码 把电话放在Edittext上,当点击下一步的时候保存到SP中 activity package com.qingguow.mobilesafe;
Java Crash在Android上的特点 这类错误一般是由Java层代码触发的 一般情况下程序出错时会弹出提示框,JVM虚拟机退出 一般的Crash工具都能够捕获,系统也提供了API 举个栗子 ?...我们可以看到,button是没有被实例化的,我们调用它的方法就会让程序崩溃,如下图所示: ?...(MainActivity.java:18) 这个日志很明确告诉我们,这个crash是由于空指针异常引起的,尝试通过一个空对象引用去调用虚方法setOnClickListener在com.devilwwj.androidcreashdemo.MainActivity.onCreate...方法里,在MainActivity.java文件的18行的位置。...解决问题 上一节我们很轻松定位到问题,我们升华一下把它解决掉,我们找到18行,修改代码如下: ?
,但方法的返回值不同) 操作验证:在操作数栈中的数据必须进行正确的操作,对常量池中的各种符号引用执行验证(通常在解析阶段执行,检查是否可以通过符号引用中描述的全限定名定位到指定类型上,以及类成员信息的访问修饰符是否允许访问等...public static final int value = 123; 实例变量不会在这阶段分配内存,它会在对象实例化时随着对象一起被分配在堆中。...解析 将常量池中的符号引用转为直接引用(得到类或者字段、方法在内存中的指针或者偏移量,以便直接调用该方法),这个可以在初始化之后再执行,可以支持 Java 的动态绑定。...形式的c引用的话,在栈区定义Child类型引用变量c,然后将堆区对象的地址赋值给它」 需要注意的是,「每个子类对象持有父类对象的引用」,可在内部通过super关键字来调用父类对象,但在外部不可访问。...System.out.println(SubClass.value); // value 字段在 SuperClass 中定义 常量在编译阶段会存入调用类的常量池中,本质上并没有直接引用到定义常量的类
,并且不会危害虚拟机自身 准备 准备阶段是正式为类变量分配内存并设置类变量的初始值阶段,在方法区分配这些变量所使用的内存空间 例如: public static int v = 666; 此时会先给v...ConstantValue属性,在准备阶段会根据ConstantValue赋值为666 解析 解析阶段是指虚拟机将常量池中的符号引用替换为直接引用的过程 CONSTANT_Class_info CONSTANT_Field_info...定义对象数组,不会触发该类的初始化 常量在编译期间会存入调用类的常量池中,本质上并没有直接引用定义常量的类,不会触 发定义常量所在的类 通过类名获取 Class 对象,不会触发类的初始化。...new一个对象的时候 访问类的静态变量(注意上面的,如果是访问父类的静态字段,不会触发子类的初始化) 访问类的静态方法 反射 Class.forName 初始化一个类的子类(会先初始化父类) 虚拟机启动时...; //利用反射实例化对象,和调用TwoNum类里面的twoNum方法 Object o = aClass.newInstance(); Method add
str = null; 在垃圾回收的一个周期内,jvm发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。...ThreadLocal有通过方法:调用get,set或remove方法时,就会尝试删除key为null的entry,可以释放value对象所占用的内存。...str = null; 在垃圾回收的一个周期内,jvm发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。...ThreadLocal有通过方法:调用get,set或remove方法时,就会尝试删除key为null的entry,可以释放value对象所占用的内存。...ThreadLocal有通过方法:调用get,set或remove方法时,就会尝试删除key为null的entry,可以释放value对象所占用的内存。
这些Variables会使用默认的Java值 - null(引用类型)、0(int)、false(boolean)等等,直到调用setter时。...~ 移位 >> >>> << 比较 == > = <= instanceof 分组 () null Cast 方法调用 数据访问 [] 三元运算 ?...例如,在表达式@{user.name}中,如果user是null,user.name会赋予它的默认值(null)。如果你引用user.age,age是int类型,那么它的默认值是0。...最常见的是在Binding类上使用静态方法.inflate方法载入View的层次结构并且绑定到它只需这一步。...由于ViewStub基本上从View的层次结构上消失,在Binding对象的View也必须消失来允许被收集。
java.lang.Class 对象,作为方法区这些数据的访问入口 3.2 验证 会完成四个阶段的检验过程: 文件格式验证 元数据验证 字节码验证 符号引用验证 3.3 准备 准备阶段是正式为类变量分配内存并设置类变量初始值的阶段...static final int value = 123; 3.4 解析 解析阶段是虚拟机将常量池内的符号引用替换为直接引用的过程。...直接引用:直接引用可以是直接指向目标的指针、相对偏移量或是一个能间接定位到目标的句柄。直接引用是与虚拟机实现地内存布局相关的,同一个符号引用在不同虚拟机实例上翻译出来的直接引用一般不会相同。...因此在虚拟机中第一个被执行的 () 方法的类肯定是 java.lang.Object。...) { // 在父类加载器无法加载的时候 // 再调用本身的 findClass 方法进行类加载 c = findClass(name
之后可以通过调用Buffer.reset()方法恢复到这个position。方便数据的重新读取,而流只能是单向读取。...的总和,在分代算法下,新生代,老生代和持久代是连续的虚拟地址,因为它们是一起分配的。...DirectByteBuffer:由该对象创建的在jvm之外的内存,对于生命期中等或较长的对象,正是堆外内存要解决的。...但是调用System.gc()并不能够保证full gc马上就能被执行。所以在后面打代码中,会进行最多9次尝试,看是否有足够的可用堆外内存来分配堆外内存。...);)说到PhantomReference它其实主要是用来跟踪对象何时被回收的,它不能影响gc决策,但是gc过程中如果发现某个对象除了只有PhantomReference引用它之外,并没有其他的地方引用它了
该方法与下面的setImageDrawable和setImageURI为三选一操作,调用了其中一个方法,就无需调用另外两个方法。...首先定义一个GestureDetector对象;然后调用ImageSwitcher的setOnTouchListener方法设置触摸监听器OnTouchListener,在该监听器的onTouch方法中让...GestureDetector对象接管事件处理;最后重写GestureDetector对象的手势监听器OnGestureListener,主要是在onFling方法中增加对左滑和右滑的处理逻辑判断。...然后调用该Builder对象的generate方法即开始色调分析,generate方法的参数是个PaletteAsyncListener监听器,监听器的onGenerated方法就是完成分析之后的回调处理...该方法在onGenerated中调用,返回值是Palette.Swatch样品对象,调用该样品对象的getRgb方法即可获得样品的色彩值。
领取专属 10元无门槛券
手把手带您无忧上云