Android 注

来源:互联网 发布:上海本土淘宝女装品牌 编辑:程序博客网 时间:2024/04/29 09:24

1.Activity在处于onPause、onStop、onDestroy状态下,系统都可以销毁该Activity所在进程,所以我们在处理一些要保存的数据时,必须在onPause方法中进行,因为onStop和onDestroy方法不一定会被调用


2.当EditText设置为不可编辑属性时,即setEnabled(false) 或者android:enabled="false"时,

此时无论设置EditText的触摸事件还是点击事件,都是无效的!此时可以将EditText换成TextView 。


3.注意popupwindow的setOnDismissListener事件!有时候很有作用。  


4.枚举的本质就是类!


5.LinkedList胜两局:删除和插入效率高;ArrayList胜一局:修改元素效率高。 


6.内存泄露:cursor如果不能及时关闭,可能会造成内存泄露!

正确写法:

Cursor c;try {      c = queryCursor();      int a = c.getInt(1);      ......    // 如果出错,后面的cursor.close()将不会执行    //c.close();  } catch (Exception e) {  } finally{    if (c != null) {        c.close();    }}
但是:Cursor需要继续使用,不能马上关闭?

比如CursorAdapter就是一个典型的例子!!!

mCursor = getContentResolver().query(CONTENT_URI, PROJECTION,null, null, null);mAdapter = new MyCursorAdapter(this, R.layout.list_item, mCursor);setListAdapter(mAdapter);// 这里就不能关闭执行mCursor.close(),// 否则list中将会无数据
    这样的Cursor应该什么时候关闭呢?
    这是个可以说好回答也可以说不好回答的问题,那就是在Cursor不再使用的时候关闭掉。
    比如说,上面的查询,如果每次进入或者resume的时候会重新查询执行。
@Overrideprotected void onStop() {    super.onStop();    // mCursorAdapter会释放之前的cursor,相当于关闭了cursor    mCursorAdapter.changeCursor(null);}


    一般来说,也只是这种需求,很少需要看不到界面的时候还在不停地显示查询结果,如果真的有,不予讨论,记得最终关掉就OK了。

    这个时候,我们一般可以在onStop()方法里面把cursor关掉(同时意味着你可能需要在onResume()或者onStart()重新查询一下)。


8.Android sqlite3查询表中最后一条记录:

sqlite3中貌似没有关于top函数的语法,所以如果需要查找表中最后一条记录可采用如下方法:
比如:查找表sensor中address为aaaa::11:22ff:fe33:4461的最后一条记录

select * from sensor where address = 'aaaa::11:22ff:fe33:4461' order by id desc limit 0,1;  


其中order by id desc 是按照id降序排列;limit 0,1中0是指从偏移量为0(也就是从第1条记录)开始,1是指需要查询的记录数,这里只查询1条记录。

9.sqlite中 getReadableDatabase () 和getWritableDatabase () 的区别:

这两个方法都可以获得SQLiteDatabase对象。
getWritableDatabase () 获得一个可进行操作的数据库类。并且查看源代码,了解到获得的是单实例的SQLiteDatabase。因为不论是调用几次,getWritableDatabase () 方法返回的都是同一个连接。
getReadableDatabase () 同样是获得SQLiteDatabase对象。一样查看源代码,了解到getReadableDatabase () 内部同样是调用getWritableDatabase ()来实现获得SQLiteDatabase对象的。但是,getReadableDatabase () 判断一旦getWritableDatabase () 抛出异常(比如存储空间满了),将以只读的方式读取数据库,此时获得的SQLiteDatabase对象将和getWritableDatabase () 获得的不一样。


10.ArrayList和数组间的相互转换:


String[] array = (String[])list.toArray(new String[size]); 

List<String> list = Arrays.asList("王利虎","张三","李四");

from:http://blog.csdn.net/brave_heart_lxl/article/details/6178909


11.使用MultipartEntity对文字、图片、视频进行综合上传

from:http://blog.csdn.net/u010142437/article/details/16117411

http://blog.csdn.net/u010142437/article/details/14639651


12.创建新线程的时候默认情况下不会去创建新的MessageQueue;

一个Activity主线程中可以有多个Handler对象,但MessageQueueLooper是只有一个,对应的Looper也是只有一个。


13.Fragmnet生命周期:




0 0