Android 开发随笔

1.编译器会检查R.java列表中的资源是否被使用,没被使用到的资源不会被编译到软件中,这样可以减少在手机占用的空间。

2.assets目录也可以存放资源文件,主要放置多媒体等数据文件,assets目录下的资源文件不会在R.java自动生成id,所以读取assets目录下的文件必须指定文件的路径,可以通过AssetManager类来访问这些文件。

3.Canvas.drawBitmap(Bitmap,p.x, p.y, null);//可用来在界面上画图,如新消息数的提示、GOOGLE地图上的位置点;

4.LocationManager,TelephonyManager,AudioManager好多Manager,各种Manager,都只能通过Context.getSystemService()来获取实例;

5.如果用户离开一个任务很长时间。默认下,系统将清除除了根activity之外的所有activity

6. 过滤器”android .intent.action.MAIN“设置为指定动作 和"android .intent.category.LAUNCHER"作为指定类型,来成为任务的入口。这种类型的过滤器会让该启动 activity的图标和标签显示在应用程序加载器上,否则桌面就看不见程序入口。

7.Activity的一些属性:

alwaysRetainTaskState:

如果一个任务的根activity的这个属性设置成了"true",那么5.提到的那些默认行为就不会发生。这个任务保留所有的activity,甚至经过了很长一段时间。

clearTaskOnLaunch:

如 果任务的根activity的这个属性设置成了”true“,那么只要用户离开了任务并返回,就会清除除了根activity之外的所 有 activity。换句话说,它和alwaysRetainTaskState正好相反,当用户返回到任务时,总是恢复到最初的状态,不管离开了多长 时 间。

finishOnTaskLaunch:这个属性和clearTaskOnLaunch类似,但是它作用于单个activity, 而不是整个任务。它可以导致任何的activity离开,包括根 activity。当它设置成"true"的时候,作为任务一部分的activity只 对当前会话有效。如果用户离开然后返回到任务中。它将不再出现。

8.Activity对事件响应不超过5秒,BroadcastReceiver执行不超过10秒。

9.IntentService是重新开一个线程来处理需要完成的任务。

10.应用间通讯:Content Provider更多用于数据的共享,BroadcastReceiver广播的信息会被所有应用接收较耗费系统资源,对于两个应用间动态的进行交互还需要通过Service来完成。

11.system_process等系统进程出问题的话,则会引起系统重启。

12.Android中任务的概念:任务其实就是activity 的栈。它由一个或多个APP中的Activity组成,共同完成一个完整的用户体验。

13.当用户按下HOME 键的时候,回到了应用程序加载器。

14.Android系统是一个多任务(Multi-Task)的操作系统,可以在用手机听音乐的同时,也执行其他多个程序。每多执行一个应用程序,就会多耗费一些系统内存,当同时执行的程序过多,或是关闭的程序没有正确释放掉内存,系统就会觉得越来越慢,甚至不稳定。

15.Fragment就相当于一个有生命周期的View,它的生命周期被所在的Activity的生命周期管理。

16.android raw与assets区别:

1)相同点:两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制;

2)不同点:

- res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID即R.id.filename;assets文件夹下的文件不会被映射到R.java中,访问的时候需要AssetManager类;
- res/raw不可以有目录结构,而assets则可以有目录结构,也就是assets目录下可以再建立文件夹;

- 读取res/raw下文件:InputStream is = getResources().openRawResource();VideoView.setVideoUri(Uri.parse("android.resource://" + getpackageName() + "/" + R.raw.movie)); 读取assets下的文件资源:InputStream is = getAssets().open("filename");

17.SAX解析xml文件的优点的是不用事先调入整个文档,占用资源少。

18.android中使用SQLiteOpenHelper这个辅助类时,可以生成一个数据库,并可以对数据库版本进行管理的方法可以是getWriteableDatabase()和getReadableDatabase()。

19.GLSurFaceView特性的是:管理一个surface,这个surface就是一块特殊的内存,能直接排版到android的视图view上;管理一个EGL display,它能让opengl把内容渲染到上述的surface上;让渲染器在独立的线程里运作,和UI线程分离。

20.Hanlder是线程与Activity通信的桥梁,如果线程处理不当,你的机器就会变得越慢,那么线程销毁的方法是:onDestroy()。

21.关于Android dvm的进程和Linux的进程,应用程序的进程说法正确的是:DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例.而每一个DVM都是在Linux 中的一个进程,所以说可以认为是同一个概念。

22.java.io包中的objectinputstream和objectoutputstream类主要用于对对象(Object)的读写。

23.PackageManager相当于PC中程序管理器,ActivityManager相当于PC中进程管理器。

24.有一些工程师在使用版本控制的时候,会将.settings、bin、gen、.classpath、.project等等这些文件和文件夹上传到repository里面去,一旦有人commit 了错误的配置,他们将会要焦头烂额地整理好长一段时间。

25.非UI线程使用view.post()方法,如果view没有被attach,则均存在潜在的内存泄漏的问题。

26.GridView和ListView的实现方式不太一样。GridView的View不是即时创建的,而是全部保存在内存中的。比如一个GridView有100项,虽然我们只能看到10项,但是其实整个100项都是在内存中的。

27.Android真正可见的生命周期中方法是onWindowFocusChanged(),看 API 文档可知。

28.引用依赖项目的一些现象:1)依赖项目中定义的组件必须在其清单文件中注册,其清单不注册换到主项目的清单注册没有用;2)依赖项目的清单中设置了某组件运行在:abc进程,则该组件真正运行在『主项目包名:abc』进程,而非『依赖项目包名:abc』3)如果把依赖项目的组件不仅在依赖项目的清单注册,也在主项目的清单注册,并故意『捣乱』,将属性设置得与依赖项目不同,则依然以依赖项目清单中的设置为准,主项目清单的设置无效。

29.strings只能在应用本地被读取,而处于AndroidManifests.xml下的meta-data则是对外界开放的,是向系统注册的信息,系统及外界是可以通过PackageInfo相关API获取到meta-data的信息的,二者关系可以形象一点看待是私有公有的关系。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值