Android个人学习小结2017.2

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/forgot2015/article/details/68631670

1、为预防内存泄漏,尽量别把 activity 或 context 设置为静态 static, 对于生命周期长的对象,可以使用 applicationContext

2、总 Context 实例个数 = Service 个数 + Activity 个数 + Application 对应的Context 实例

3、通用图标可以用AS自带的 Image Asset 和Vector Asset创建,其中Vector Asset可以自定义dp大小,文件容量也小

4、Android getActivity(), getContext(), 是对于Activity的, Activity继承于Context,功能更多更强大
getApplication()和getApplicationContext()是对于整个App应用的

5、Service是运行在主线程里,一般需要在Service再开子线程来处理业务,这样比直接在Activity运用子线程处理业务的好处时,此时的Service不依赖与Activity,就算Activity关闭了,Service依然可以正常运行,在需要时,别的Activity都能再调用此Service,或者再建立关联

6、sqlite数据库在onCreate打开,在onDestroy关闭

7、概要设计和详细设计的区别

概要设计就是设计软件的结构,包括组成模块,模块的层次结构,模块的调用关系,每个模块的功能等等。同时,还要设计该项目的应用系统的总体数据结构和数据库结构,即应用系统要存储什么数据,这些数据是什么样的结构,它们之间有什么关系。详细设计阶段就是为每个模块完成的功能进行具体的描述,要把功能描述转变为精确的、结构化的过程描述。概要设计阶段通常得到软件结构图详细设计阶段常用的描述方式有:流程图、N-S图、PAD图、伪代码等.

8、CPU要读取一个数据时,首先从Cache中查找,如果找到就立即读取并送给CPU处理;如果没有找到,就用相对慢的速度从内存中读取并送给CPU处理,同时把这个数据所在的数据块调入Cache中,可以使得以后对整块数据的读取都从Cache中进行,不必再调用内存。
正是这样的读取机制使CPU读取Cache的命中率非常高(大多数CPU可达90%左右),也就是说CPU下一次要读取的数据90%都在Cache中,只有大约10%需要从内存读取。这大大节省了CPU直接读取内存的时间,也使CPU读取数据时基本无需等待。总的来说,CPU读取数据的顺序是先Cache后内存.

9、OA :Office Automation System 办公自动化系统
10、判断字符串string1是否包含string2的方法
使用indexOf()方法,如果indexOf方法返回大于等于0的值,则表示包含,若返回-1则表示字符串中不包含。
简单
if(string1.contains(string2))

11、”关于序列化
字符串是对象里的某些数据的输出结果,你看到的文本文件只包含了对象的一部分信息,你看到可能只是个值而已。
比如一个对象
object monkey
{
String monkeyName = “悟空”;
long monkeyAge = 1000;
}
你输出的字符串可能只是这个:
悟空;
10000;

但对象很多信息丢掉了,比如对象名称,字段属性之类的。
序列化时把对象完整的输入到某个地方,比如文件,这个文件人类是看不懂的,但在反序列化时,文件就会被完成的读取为一个对象,和上面的对象一模一样,这样我们就可以在代码中对对象进行直接操作了。

12、在Terminal中查看连接设备的sqlite数据库
输入adb shell进入操控手机模式
cd data/data/进入目录
ls 查看当前所有目录,再进入指定的应用databases目录
sqlite3 Student.db 进入该数据库,可以用语句进行操作了
如 select * from student; 查看student表,注意分号;结束
insert into student values(‘2’,’2’,’2’,’3’,’4’) 插入一行数据到student表
.help 帮助菜单
.databases 显示数据库信息;
.tables 显示表名称;
.schema 命令可以查看创建数据表时的SQL命令;
.schema table_name 查看创建表table_name时的SQL的命令;
.exit 退出sqlite操作

1. SELECT CustomerName, SUM(OrderPrice) FROM Orders WHERE Country=China   
2. GROUP BY CustomerName   
3. HAVING SUM(OrderPrice)>500  
4. ORDER BY CustomerName  

对应android代码为

1. String table =  "Orders" ;  
2. String[] columns = new  String[] { "CustomerName" ,  "SUM(OrderPrice)" };  
3. String selection = "Country=?" ;  
4. String[] selectionArgs = new  String[]{ "China" };  
5. String groupBy = "CustomerName" ;  
6. String having = "SUM(OrderPrice)>500" ;  
7. String orderBy = "CustomerName" ;  
8. Cursor c = db.query(table, columns, selection, selectionArgs, groupBy, having, orderBy, null);   

13、java interface方法都要实现吗,貌似有问题,比如写个MyAdapter继承BaseAdapter, 但并不是Adapter中所有接口方法都要求你去实现,为什么
因为MyAdapter继承BaseAdapter,然后BaseAdapter再实现Adapter,而BaseAdapter本身是抽象类,已经重写了Adapter中的部分方法,且在BaseAdapter中定义为普通方法(非抽象方法了),所以这部分已经包含在BaseAdapter中的方法,不用MyAdapter再去实现,而BaseAdapter没有重写的方法,就需要MyAdapter去重写实现了

14、ctrl+alt+方向键,可改变显示器方向,是intel显卡程序的功能吗?

15、提示
Android: adb: Permission Denied
执行一下
adb root

16、java类中,this代表的就是这个类,比如this.methon1(),就是调用该类的methon1()方法,比如this.age 就是调用该类的age属性,比如this(“str”)就是调用该类的构造器, 貌似不是
这个this(0,null,0); 只能在构造器中使用,比如无参构造器,来给它一个默认格式

/带参构造器,把学生信息传进来/
public StudentBean(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
/不带参的构造器,学生信息默认值/
public StudentBean(){
this(0,null,0);

17\有些ubuntu残留的错误文件,在win系统无法删除的,甚至会影响到磁盘的合并,此时除了格式化硬盘,还有别的办法,用系统自带的磁盘修复命令
解决方法:
在 cmd 命令行窗口中输入如下代码:
chkdsk /f /x c:

PS: 其中 “c:” 为需要进行操作的盘符,根据实际盘符修改。

18\Java 程序运行时的内存分配策略有三种,分别是静态分配,栈式分配,和堆式分配,对应的,三种存储策略使用的内存空间主要分别是静态存储区(也称方法区)、栈区和堆区。

* 静态存储区(方法区):主要存放静态数据、全局 static 数据和常量。这块内存在程序编译时就已经分配好,并且在程序整个运行期间都存在。

* 栈区 :当方法被执行时,方法体内的局部变量都在栈上创建,并在方法执行结束时这些局部变量所持有的内存将会自动被释放。因为栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。

*堆区 : 又称动态内存分配,通常就是指在程序运行时直接 new 出来的内存(实例对象)。这部分内存在不使用时将会由 Java 垃圾回收器来负责回收。

19、java 网络请求都要放子线程吗?
如何保证多线程的执行顺序? 比如线程1执行完再去执行线程2? 既然要这样顺序执行,还有必要用多线程吗?
对的,将你想要先后执行的两个子线程,合并为一个子线程就行了,需要发消息的话就等执行完两个子线程再一起发消息

20、Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。

21、默认情况下xmind输入的文字都是水平,且只能一行,如果要多行显示,在编辑文字的时候,请使用CTRL+Enter而不要直接回车!

22、代码精简,if(isCheck){isCheck=false;} else{isCheck=true;}
isCheck = !isCheck;

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页