《第一行代码》拾遗

本文是在看郭霖的《第一行代码-Android》过程中的知识点汇集,下面的摘录知识点都是我认为之前Android开发中容易忽视,或者特别重要的知识点。

  1. 隐式启动一般依靠action、category、data进行匹配,只有activity的这三项内容能够匹配Intent指定内容时才会响应Intent。
    每个Intent 只能指定一个action,却能指定多个category。
    隐式启动除了能启动自己程序内的activity,还可以启动其他activity,使得Android 多个应用程序这间功能共享成为可能。
  2. 自定义控件时,当将布局文件加到自定义控件中,有人喜欢
 contentView = LayoutInflater.from(context).inflate(R.layout.my_view, null);
       addView(contentView);

如果自定义只有这个布局时,其实这样更好:

//将R.layout.my_view 加到view中
LayoutInflater.from(context).inflate(R.layout.my_view, this);  
  1. 如果需要按下Back 返回上个fragment,可以在FragmentTransaction增加addToBackStack(),就能将事物添加到返回栈中;

  2. 新fragment替换旧fragment时,旧fragment 的onPause()、onStop()、onDestroyView()方法依次执行,如果替换时没有调用addToBackStack()方法,此时旧fragment就会进入销毁状态,onDestroy()和onDetach()依次执行。如果调用了addToBackStack(),则老fragment不会被销毁,按下返回键会重新回调屏幕,依次调用onCreateView()、onActivityCreated()、onStart()、onResume()方法。

  3. 系统提供的openFileOutput(String fileName,int Mode);
    创建的文件保存在/data/data/<package name>/files/目录中,而且文件名fileName 不能包含分隔符”/",
    openFileInput(fileName)得到她的对应得输出流。

  4. PreferenceManager.getDefaultSharedPreferences(Context context) 自动使用当前应用程序的包名作为前缀来命名的SharedPreferences文件。

  5. Android 系统提供SQLiteOpenHelper帮助类,通过实现onCreate()、onUpgrade()来实现创建,升级数据库的逻辑。构建完SQLiteOpenHelper的实例之后,再调用它的getReadableDatabase()/getWritableDatabase()方法就能够创建数据库了,数据库文件会放在/data/data/<package name>/databases/目录中。
    另外注意数据库与数据库上的表的区别。
    onCreate()创建了数据库,数据库创建了以后不再执行,当版本号大于数据库之前的版本号onUpgrade()才会执行,
    而且onCreate(),onUpgrade不要外部直接调用,调用它的getReadableDatabase()/getWritableDatabase()它会按照SQLiteOpenHelper传过来的构造参数自动执行。

  6. SQLiteDatabase类为我们提供了很多种方法,而较常用的方法如下

(返回值)方法名 方法描述
(int) delete(String table,String whereClause,String[] whereArgs) 删除数据行的便捷方法
(long) insert(String table,String nullColumnHack,ContentValues values) 添加数据行的便捷方法
(int) update(String table, ContentValues values, String whereClause, String[] whereArgs) 更新数据行的便捷方法
(void) execSQL(String sql) 执行一个SQL语句,可以是一个select或其他的sql语句
(void) close() 关闭数据库
(Cursor) query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit) 查询指定的数据表返回一个带游标的数据集
(Cursor) rawQuery(String sql, String[] selectionArgs) 运行一个预置的SQL语句,返回带游标的数据集(与上面的语句最大的区别就是防止SQL注入)
  1. apk只有签名后才能在手机上安装,即使是程序开发中运行的debug版本,系统采用了默认的keyStore文件进行自动签名。
  2. Android获取手机旋转方向和角度是通过加速度传感和地磁传感器共同计算出。
  3. 服务并不是运行在一个独立的进程中的,而是依赖于创建服务时所在的应用进程。当某一个应用程序被杀掉时,所以依 赖于该进程的服务也会停止运行。另外实际服务不会自动开启线程,所有的代码都是默认运行在主线程当中的。
  4. 服务中重写onCreate()、onStartCommand()和onDestroy()这三个方法。其中onCreate()方法会在服务创建的时候调用,onStartCommand()方法会在每次服务启动的时候调用,onDestroy()方法会在服务销毁的时候调用,服务中任何位置可以调用stopSelf()停止服务。
  5. 一旦调用Context的startService()方法,相应的服务就会启动起来,并回调onStartCommand()方法,如果这个服务没有创建过,onCreate()方法会先于onStartCommand()方法执行。另外可以调用Context的bindService()来获取一个服务的持久连接,回调服务中的onBind()方法,如果这个服务之前没有创建过,onCreate()方法会先于onBind()方法执行。之后调用方可以获取onBind()方法中返回IBinder对象实例,可以与服务进行自由通信。
  6. 当调用startService()方法后,只要调用一次stopService(),服务中的onDestroy()方法就会执行,销毁服务。类似调用了bindService()方法后,又去调用unBindService()方法,onDestroy()也会执行,如果某服务既调用了startService()又调用了bindService()方法,必须同时调用stopService和unBindService(),onDestroy才会执行销毁服务。
  7. 前台服务和普通服务最大的区别在于,它会有个正在运行的图标在系统的状态栏显示,下来状态栏后才可以看到更加详细的信息,非常类似通知的效果。
  8. 从Android 4.4开始AlarmManager任务触发时间变得不再准确,有可能会延迟一段时间。这是系统在耗电性能方面的改进优化,系统会自动检测目前有多少个Alarm任务存在,然后将触发时间将近的几个任务放在一起执行,大幅度减少CPU被唤醒次数,从而有效延迟电池使用时间,如果要求执行时间必须正确无误,可以调用AlarmManager的setExact()方法替代set(),保证任务准时执行。
  9. 当手机收到一条短信时候,系统就会发出一条android.provider.Telephony.SMS_RECEIVED的广播,这条广播携带这个与短信相关的所有的数据。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容