复习1。

1.  Pracelable和Seraliable的区别

俩者都能实现序列化数据,将内存的数据转化成字节,把Java对象信息保存到存储媒介,所有当对象不存在时依然可以使用这个对象;反序列化相反。

Pracelable于内存中读写而Serialable在IO中读写,一般情况下选择读写速度较快的Praceable。

2.  多进程的应用—调试方法可参看http://blog.csdn.net/SEU_Calvin/article/details/53932171

多模块应用。如应用大而全,里面肯定会有很多模块,假如有地图模块、大图浏览、自定义WebView等等(这些都是吃内存大户),一个成熟的应用一定是多模块化的。首先多进程开发能为应用解决了OOM问题,因为Android对内存的限制是针对于进程的,所以,当我们需要加载大图之类的操作,可以在新的进程中去执行,避免主进程OOM。而且假如图片浏览进程打开了一个过大的图片,java heap 申请内存失败,该进程崩溃并不影响我主进程的使用。

坏处:消耗用户的电量,多占用了系统的空间,需要合理使用

3.  堆栈

堆:程序运行时申请的空间,动态分配大小,存取速度较慢,但可以动态地分配内存大小,生存期到了被自动回收,存储动态数据如new等自定义内存变量, 简单类型(int,char等8种,不包含string)都是在堆中分配内存

栈:Stack,建立线程或进程分配的存储空间,编译的时候可以指定大小,数据可以共享,销毁创建块,效率高,是堆的一种使用方法,先进后出的原则。存储局部变量

静态区域:存储全局变量

在Java中所有的对象(包括int的wrapper  Integer)都是在堆中分配的,但是这个对象的引用却是在Stack中分配。也就是说在建立一个对象时从两个地方都分配内存,在Heap中分配的内存实际建立这个对象,而在Stack中分配的内存只是一个指向这个堆对象的指针(引用)而已。

 

public class Main{ 

int a = 1; // a 和1 都在堆里 

Student s = new Student();// s 和new d的Student()都在 堆里  

public void XXX(){  

int b = 1;//b 和 1 栈里面  

Student s2 = new Student();// s2 在栈里, new的 Student() 在堆里  

}

}

基本数据类型和对象的值传递和引用传递

class MyObj {
   
public String a = "str";
    public int
b = 10;
}

public class Test {
   
public static void main(String[]args) {
    Test t =
new Test();
   
String a = "str";
   
t.test1(a);//这里传递的参数a就是值传递
    Log.e("test_log_end", a + "");
   
System.out.println(a);

   
StringBuffer b=new StringBuffer("str");
   
t.test2(b);//这里传递的参数obj就是引用类型的值传递
    Log.e("test_log_end", b + "");
   
System.out.println(b);
}

   
public void test1(String str) {
        str = str+
"ing";
       
Log.e("test_log", str + "");
       
System.out.println(str);
   
}

   
public void test2(StringBuffer str) {
        str = str.append(
"ing");
       
Log.e("test_log", str + "");
       
System.out.println(str);
   
}
}

E/test_log:str ing

E/test_log_end:str

E/test_log:str ing

E/test_log_end: str ing

--------------------------------------------分割-----------------------------------------------------

class MyObj {
    public String a = "str";
    public int b = 10;
}
public class TestB {

    public static void main(String[] args) {
        TestB t = new TestB();
        int a = 99;
        t.test1(a);//这里传递的参数a就是按值传递
        System.out.println(a);
        Log.e("test_log_end", a + "");

        MyObj obj = new MyObj();
        t.test2(obj);//这里传递的参数obj就是引用类型的值传递
        System.out.println(obj.b);
        Log.e("test_log_end", obj.b + "");
    }

    public void test1(int b) {
        b = ++b;
        Log.e("test_log", b + "");
        System.out.println(b);
    }

    public void test2(MyObj obj) {
        obj.b = 100;
        Log.e("test_log", obj.b + "");
        System.out.println(obj.b);
    }
}

E/test_log:100

E/test_log_end:99

E/test_log:100

E/test_log_end:100

4.  启动模式

singleTop适合接收通知启动的内容显示页面。例如,某个新闻客户端的新闻内容页面,如果收到10个新闻推送,每次都打开一个新闻内容页面是很烦人的。

singleTask 栈内复用模式,适合作为程序入口点。例如浏览器的主界面。不管从多少个应用启动浏览器,只会启动主界面一次,其余情况都会走onNewIntent,并且会清空主界面上面的其他页面。之前打开过的页面,打开之前的页面就ok,不再新建。

singleInstance适合需要与程序分离开的页面。例如闹铃提醒,将闹铃提醒与闹铃设置分离。singleInstance不要用于中间页面,如果用于中间页面,跳转会有问题,比如:A-> B (singleInstance) -> C,完全退出后,在此启动,首先打开的是B。独立于其他启动模式的activity的栈中   如A->B(SingleInstance)->C时,在C返回会直接到A

5. https和http简单比较

HTTPS= HTTP + SSL

HTTPS在 HTTP 应用层的基础上使用安全套接字层作为子层。

HTTP用来通过互联网传输和接收信息的协议,使用请求/响应的过程,因此信息可在服务器间快速、轻松而且精确的进行传输。当你访问 Web 页面的时候你就是在使用 HTTP 协议,但 HTTP 是不安全的,可以轻松对窃听你跟 Web 服务器之间的数据传输

HTTP的 URL 以 http:// 开头,而HTTPS 的 URL 以 https:// 开头

HTTP是不安全的,而 HTTPS 是安全的

HTTP标准端口是 80 ,而 HTTPS 的标准端口是443

在 OSI 网络模型中,HTTP 工作于应用层,而 HTTPS 工作在传输层

HTTP无需加密,而 HTTPS 对传输的数据进行加密

HTTP无需证书,而 HTTPS 需要认证证书

6.  String StringBuffer StringBuild区别

如果要操作少量的数据,用String ;单线程操作大量数据,用StringBuilder ;多线程操作大量数据,用StringBuffer。

不要使用String类的"+"来进行频繁的拼接,因为那样的性能极差的,应该使用StringBuffer或StringBuilder类,这在Java的优化上是一条比较重要的原则

StringBuilder一般使用在方法内部来完成类似"+"功能,因为是线程不安全的,所以用完以后可以丢弃。StringBuffer主要用在全局变量中。

7.解决ScrollView与Viewpager和ListView冲突问题

动态计算listview的高度 然互设置 首先从listviewgetAdapter  遍历adapter中的view 测量高度 累加 然后设置给listview  Viewpager 也是动态设置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值