您的位置:首页 > 职场人生

【黑马程序员】----Android知识点--个人整理

2015-04-02 09:37 211 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
个人自学过程中整理的知识点,有错误之处,请指正.

1、layout_width和layout_height的属性中,fill_parent
就是让控件宽或者高占全屏,填充满父级容器,wrap_content 是让控件的高或宽仅仅把控件里的内容包裹住,而不是全屏;

2、往文件末尾追加东西,可以在FileOutputStream的第二参数设置为true;输入输出流也可以用安卓Context中Context.OpentFileOutput()
 和  OpenFileInput()

3、Context提供的api: getFileDir()用于获取当前应用所在包下的files文件夹;getCacheDir(),获取缓存文件
4、文件的读取方式: ContextMODE_PRIVATE 私有,只能被本应用读取;ContextMODE_APPEND 现检查文件是否存在,若存在则追加在文件末尾,
ContextMODE_READABLE 可以被其他应用读取, ContextMODE_WRITEABLE 可以被其他应用写入; 如果需要多个权限,则用“+”

5、往SD卡中写文件,首先要检查SD是否存在 (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)),其次赋给SD读、写、删的权限;
获取SD卡路径 Environment.getExternalStorageDirectory(); 需要设置SD卡读写权限

6、getContext().getFilesDir(),获得当前应用的files文件夹路径

7、保存参数设置:  //第一个参数要保存的参数文件名称,不用带后缀, 第二个是模式(通过上下文获得SharedPreference获取)
SharedPreferences sf = context.getSharedPreferences("pref_saved", Context.MODE_PRIVATE);

 ...(Editor)
8、数据库操作实例获取方式: SQLiteDatabase db = 对象.getWritableDatabase();数据库只有一个应用在使用时可以不用关闭,可以提高效率;   缓存数据库实例的功能插入语句insert(),可以使用 ContentValues设置数据
9、数据库,开始一个事务, db.beginTransaction();   设置事务标识, db.setTransactionSuccessful();  结束事务db.endTransaction();   
10、使用游标适配器的时候: SimpleCursorAdapter   , 注意字段“_id”; simpleAdapter时, 通过R.layout.  得到需要适配的页面。

11、访问内容提供者(要建在应用包下,mainActivity)        
ContentResolver (ContentResolver resolver = this.getContext().getContentResolver();)

监听数据的变化 :    主应用作为内容提供者,A应用向其中插入数据时,B应用可以得到通知主要知识点:  A根据内容提供者路径,向主应用数据库中插入数据,主应用中在实现ContentProvider的类中,插入方法下建立 监听(this.getContext().getContentResolver().notifyChange(uri,
null););   B应用要在OnCreat()方法中注册监听
this.getContentResolver().registerContentObserver(uri, true, new PersonContentProvider( newHandler()));

<这个uri代表的数据发生变化的时候会调用ContentObserver中的OnChange方法>, PersonContentProvider类继承ContentObserver类。在OnChange()方法中实现监听<得到最近插入的一条数据>。
12、GET方式访问:  
HttpURLConnection hu = (HttpURLConnection)new URL(sb.toString()).openConnection();
hu.setConnectTimeout(5000);
hu.setRequestMethod("GET");

13、屏幕适配的几种方式: 
1)、用一套图片(drawable下hdpi);
2)、layout后加上像素;
3)、xml文件方式(修改配置参数layout_weigth,通过配权重);
4)、通过java代码动态获取长宽进行适配
14、activity激活的几种方式:  
1)、standard,每次启动会启动不同的实例;
2)、singleTop,每次启动会激活任务栈中最顶端的;
3)、singleTask,每次激活会杀死该实例上方的存活实例;
4)、singleInstance,会共用一个实例。

15、service不会自己启动,通过调用context.startService(); 或者bindService()来启动

16、方向传感器SensorManager;   activity离开前台(onPause)是取消注册(unregisterListener),避免耗电,
17、主线程更新UI一般用handler机制
18、addTextChangedListener  监听文本变化

19、AlertDialog使用:
AlertDialog.Builder builder = new Builder(SettingActivity.this);
builder.setTitle("归属地提示框风格");
builder.setSingleChoiceItems(items,dd, new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
//保存选择参数
Editor editor = sp.edit();
editor.putInt("which", which);
editor.commit();
scv_changebg.setDesc(items[which]);
//取消对话框
dialog.dismiss();
}
});
builder.setNegativeButton("cancel", null);
builder.show()

20、有电话优先级的窗体类型: WindowManager.layoutParams.TYPE_PRIORITY_PHONE
        (System_alter_window,添加此权限)
21、双击事件居中
    
long[] mHits = new long[2];
System.arraycopy(mHits, 1, mHits, 0, mHits.length - 1);
mHits[mHits.length - 1] = SystemClock.uptimeMillis();
if (mHits[0] >= (SystemClock.uptimeMillis() - 500)) {
// 双击居中了。。。
params.x = wm.getDefaultDisplay().getWidth()/2-view.getWidth()/2;
wm.updateViewLayout(view, params);
Editor editor = sp.edit();
editor.putInt("lastx", params.x);
editor.commit();
}
22、shell命令下进入数据库  sqlite3  dbname

23、短信拦截开启与关闭、智能拦截:
    自定义广播接受者(同优先级别的代码注册和清单文件注册,代码注册优先级要比清单文件注册优先级高);

    代码注册的可以通过代码关闭
    onCreate() 中通过 registerReceiver
    onDestory()中,通过unregisterReceiver()

24、子线程是无法直接更新UI的,可以通过两种方式更新,第一,通过handler发消息,第二种,runOnUiTread(new
runnable(){})

25、runOnUiThread,可以进行较小的UI更新,比如吐司

26、分页加载和分批加载。 
    分批加载,sql语句限制,当item滑行道底部的时候,开始执行第二次查询(注意两点,第一点第二次加载获取到的数据应该追加到第一次获取的数据之前<集合先判断是否为空>,第二点创建适配器前也要先进行一次判断,如果为空,创建新的适配器,如果不为空,则只用通知适配器进行数据更新即可 adapter = new **adapter();   --->  adapter.notifyDataSetChanged())

    分页加载,分页加载用在数据量较大时,数据叠加到一定地步会造成集合越界,内存溢出,可以用分页加载实现,即上一步中,集合不判断是否为空,每次用新集合,页面只显示一页数据

27、
    Timer和TimerTask的用法
        
private Timer timer;
private TimerTask timerTask;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

timer = new Timer();
timerTask = new TimerTask() {
@Override
public void run() {
}
};
timer.schedule(timerTask, 0, 3000);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: