安卓和 java 学习笔记

1、访问权限为 private 的成员变量或方法,需要执行setAccessible() 方法,并将入口参数设置为 true; 否则不允许访问。

2、为了保证线程的安全,可以使用同步块 synchronized 关键字。还有一种是定义同步的方法,同步方法前面有 synchronized。

// 1synchronized(Object){
    ...//
}
// 2
public synchronized void doit(){
    // 将共享资源操作放置在这里
}

 3、关于 try catch finaly 的

先看下面这个程序:

protected boolean fina11(){
        try{
            Toast.makeText(this, "You clicked Add", Toast.LENGTH_SHORT).show();
            return true;
        }catch (Exception e){

        }finally {
            Toast.makeText(this, "finally", Toast.LENGTH_SHORT).show();
        }
        return false;
    }

运行后执行的结果为 "You clicked Add", "finally" ,返回值 是true;不是false; 如果把 return true 给注释掉;那么就会返回 false;

4、可在 widegt 中发送 intent 给服务端,服务端注册接受即可,但是发送给activity 的话有点困难。

5、正常情况下requestWindowFeature(Window.FEATURE_NO_TITLE)是可以生效的,但是当Activity继承子AppCompatActivity的时候,这个就失效了

第一种解决办法,添加红色代码,注意要放在最后:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);
        if (getSupportActionBar() != null){
            getSupportActionBar().hide();
        }
    }

第二种解决办法,添加红色代码,注意代码顺序,放中间,其他位置都不可以:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);
    }

 

6、关于给 recycleView 添加 点击事件的实现:

首先我们给其实现了 implements View.OnClickListener  ;然后重写了 onClick 事件。 在 onclick中我们把 对 接口 OnItemClickListener 中的方法 onItemClick 进行了调用。从而实现了点击 item 事件。具体代码参见https://github.com/huanshen/Learn-Android/tree/master/recycleTest。下载编译运行即可。

其实简单来说 只要实现 implements View.OnClickListener  ,点击之后就会调用  onClick 方法,但是因为是全局相应的,而不是 一个 item, 所以我们就重新写了一个接口,并定义了一个 onItemClick 方法。

7、String.valueOf 和 .toString 方法

首先我们看 String.valueOf 的源码:

public static String valueOf(Object obj) {
    return (obj == null) ? "null" : obj.toString();
}

可以发现, String.valueOf 的实现其实也是调用了 .toString  的方法,只不过,它还对数据为空的情况进行了处理。返回 “null”。

8、在实际应用场景中,假设A Activity位于栈顶,此时用户操作,从A Activity跳转到B Activity。那么对AB来说,具体会回调哪些生命周期中的方法呢?回调方法的具体回调顺序又是怎么样的呢?

开始时,A被实例化,执行的回调有A:onCreate -> A:onStart -> A:onResume。

当用户点击A中按钮来到B时,假设B全部遮挡住了A,将依次执行A:onPause -> B:onCreate -> B:onStart -> B:onResume -> A:onStop。

此时如果点击Back键,将依次执行B:onPause -> A:onRestart -> A:onStart -> A:onResume -> B:onStop -> B:onDestroy。

至此,Activity栈中只有A。在Android中,有两个按键在影响Activity生命周期这块需要格外区分下,即Back键和Home键。我们先直接看下实验结果:

此时如果按下Back键,系统返回到桌面,并依次执行A:onPause -> A:onStop -> A:onDestroy。

此时如果按下Home键(非长按),系统返回到桌面,并依次执行A:onPause -> A:onStop。由此可见,Back键和Home键主要区别在于是否会执行onDestroy。

此时如果长按Home键,不同手机可能弹出不同内容,Activity生命周期未发生变化(由小米2s测的,不知道其他手机是否会对Activity生命周期有影响)。

9、IPC 通信方式的优缺点和适用场景

10、Android中的多进程模式

(1) 通过给四大组件指定 android:process 属性就可以开启多进程模式,默认进程的进程名是包名 packageName,进程名以 : 开头的进程属于当前应用的私有进程,其他应用的组件不可以和它跑在同一个进程中,而进程名不以:开头的进程属于全局进程,其他应用通过 ShareUID 方法可以和它跑在同一个进程中。

android:process=":xyz" //进程名是 packageName:xyz
android:process="aaa.bbb.ccc" //进程名是 aaa.bbb.ccc

(2) Android系统会为每个应用分配一个唯一的 UID,具有相同 UID 的应用才能共享数据。两个应用通过ShareUID跑在同一个进程中是有要求的,需要这两个应用有相同的 ShareUID并且签名相同才可以。 在这种情况下,它们可以相互访问对方的私有数据,比如 data 目录、组件信息等,不管它们是否跑在同一个进程中。如果它们跑在同一个进程中,还可以共享内存数据,它们看起来就像是一个应用的两个部分。

(3) android 系统会为每个进程分配一个独立的虚拟机,不同的虚拟机在内存分配上有不同的地址空间,所以不同的虚拟机中访问同一个类的对象会产生多个副本。

(4) 使用多线程容易造成以下几个问题:

1. 静态成员和单例模式完全失效;

2. 线程同步机制完全失效:无论锁对象还是锁全局对象都无法保证线程同步;

3.  SharedPreferences 的可靠性下降:SharedPreferences 不支持并发读写;

4. Application 会多次创建:当一个组件跑在一个新的进程的时候,系统要在创建新的进程的同时分配独立的虚拟机,应用会重新启动一次,也就会创建新的 Application。运行在同一个进程中的组件是属于同一个虚拟机和同一个 Application。

同一个应用的不同组件,如果它们运行在不同进程中,那么和它们分别属于两个应用没有本质区别。

时间: 2024-12-28 15:05:50

安卓和 java 学习笔记的相关文章

Java学习笔记3-操作符

Java基本操作符:+.-.*./.%.=.==.!=.+=.-=. 优先级:先乘除后加减,如果是连接符+号会优先往前匹配,比如 a+++++b,会被解释称 a++ ++ +b,所以会报错,需要自行使用括号隔离为 (a++) + (++b). 对象的引用如果赋值给了对象的引用后,2 个对象将指向同一个引用,有一个对象的引用重新赋值后将同时影响到另一个对象,比如 ClassName classA = new ClassName(); ClassName classB = new ClassName

java学习笔记10--泛型总结

java学习笔记系列: java学习笔记9--内部类总结 java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 java学习笔记6--类的继承.Object类 java学习笔记5--类的方法 java学习笔记4--对象的初始化与回收 java学习笔记3--类与对象的基础 java学习笔记2--数据类型.数组 java学习笔记1--开发环境平台总结 本文地址:http://www.cnblogs.com/archimedes/p/java-study-note10.html,转载

Java学习笔记_25_Collections类

25.Collections类: Collections类是一个工具类,用来对集合进行操作,它主要是提供一些排序算法,包括随机排序.反相排序等. Collections类提供了一些静态方法,实现了基于List容器的一些常用算法. Collections的一些方法列表: · void sort(List): 对List内的元素进行排序. · void shuffle(List): 对List内的元素随机排序. · void reverse(List): 对List内的元素进行逆序排列. · voi

Java学习笔记心得——初识Java

初识Java 拿到这本厚厚的<Java学习笔记>,翻开目录:Java平台概论.从JDK到TDE.认识对象.封装.继承与多态...看着这些似懂非懂的术语名词,心里怀着些好奇与担忧,就这样我开始走进Java的世界.  Java产生的历史 Java来自于Sun公司的一个叫Green Project中撰写的程序语言,全球信息网(World Wide Web)兴起,Java Applet成为网页互动技术的代表,特别适合于Internet应用程序开发. Java语言的特点 1.面向对象 这是Java最重要

java学习笔记8--接口总结

接着前面的学习: java学习笔记7--抽象类与抽象方法 java学习笔记6--类的继承.Object类 java学习笔记5--类的方法 java学习笔记4--对象的初始化与回收 java学习笔记3--类与对象的基础 java学习笔记2--数据类型.数组 java学习笔记1--开发环境平台总结 本文地址:http://www.cnblogs.com/archimedes/p/java-study-note8.html,转载请注明源地址. 生活中的接口: 什么是接口? 一个Java接口是一些方法特

java学习笔记3——java关键字

java学习笔记3——java关键字 虽然老师说不用刻意的去记忆,但是我还是在网上找到了非常详细的注解,再次收藏 关键字的类型表: 各个关键字的详细注解和实例,按首字母排序: 1.abstract abstract 关键字可以修改类或方法. abstract 类可以扩展(增加子类),但不能直接实例化. abstract 方法不在声明它的类中实现,但必须在某个子类中重写. -示例- public abstract class MyClass{ } public abstract String my

java学习笔记一

只记录一些我认为比较必要,容易出错的地方.(不断更新中) 内存:分为四段,代码段code segment,数据段data segment,栈stack, 堆heap.记住如下图 数据类型: 1.java整形常量默认为int类型,当使用long类型时,因此需要添加“l”或“L”,一般用大写,小写像1.如long i = 888888888888L 2.浮点数时会默认为double类型,因此使用float时需要添加f.如 float i = 0.123f 3.java支持大数运算. 强制转换 flo

java学习笔记(三)java中的修饰符abstract、static与final

一.四种访问级别的访问范围 访问级别 访问修饰符 同类 同包 子类 不同的包 公开 public 受保护 protected 默认 没有访问修饰符 私有的 private 二.使用abstract修饰符需要遵守的语法规则 1.抽象类中可以没有抽象方法,但是包含抽象方法的类必须定义为抽象类,即用abstract修饰: 2.抽象类跟抽象方法不能被final修饰符修饰: 3.抽象类中可以有非抽象方法,因为继承抽象类的子类必须重写父类中所有的抽象方法,因此抽象类中不能有抽象构造方法和抽象静态方法: 4.

Java学习笔记day_01

Java学习笔记(复习整理) 虽然不知道该怎么写,但是不起步就永远不知道该怎么做..刚开始可能会写的很差劲,但会一点一点变好的. 本笔记是以我按照传智播客的视频和Java核心思想来学习,前面的基础部分主要是用于个人的复习使用的. 第一段代码:HelloWorld public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }