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应该什么时候关闭呢?@Override
protected void onStop() {
super.onStop();
// mCursorAdapter会释放之前的cursor,相当于关闭了cursor
mCursorAdapter.changeCursor(null);
}
这个时候,我们一般可以在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;
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生命周期: