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

时间:2023-01-27 13:04:31


------ 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);
	}