Android学习笔记

Android学习笔记Android
1、10个基本简单的linux
mkdir 创建⽂件夹
rmdir 删除⽂件夹
rm 删除⽂件
touch 创建⽂件
cat 查看⽂件
find查⽬录
mv 移动(修改)⽂件
cp 拷贝⽂件
cd 切换当前⽬录
油水冷却器
tail 查看⽂件尾部
ls 列出⽂件清单
reboot重启
ps 查看系统进程
2、adb命令
adb device 查看连接计算机的设备
adb reboot 重启设备
adb reboot bootloader 刷机模式
adb logcat 查看log
adb kill-server 终⽌进程服务
adb start-server 重启进程服务
adb install xxx.apk安装apk
adb unstall xxx.apk 卸载apk
adb connect ip地址 连接设备
adb shell kill [pid] 杀死进程
adb shell ps 查看进程
adb shell ls 列出⽬录下的⽂件夹
adb logcat -c 清除log缓存
3、ANR(Application not Responding) 如何避免?
将耗时的操作,⽐如:访问⽹络、Socker通信、⼤量查询SQL语句都放到⼦线程中去,通过handle.sendMessage、runonUITread、AsyncTask等⽅式更新UI。
4、⼀条最长的短信息约占多少个byte?隧道喷浆
国内三⼤运营商通常情况下中⽂70、英⽂160个。包括标点
5、如何判断是否有SD卡:ExternalStorageState().equals(MEDIA_MOUNTED)
6、Android程序与Java程序的区别:Android程序⽤android sdk开发,java程序⽤ java sdk开发。Android程序引⽤了⼤部分的Java SDK.
7、启动应⽤后,改变系统语⾔,应⽤的语⾔会改变么
液体收集系统⼀般是不会的,只有重启应⽤才能改变应⽤语⾔,除⾮应⽤做了国际化处理。
8、介绍下adb、ddms、aapt的作⽤:
adb:(Android debug bridge)Android调试桥
ddms:(Dalvik DeBug Monitor Service)程序执⾏查看器(dalvik调试监视服务)
aapt:Android sdk中提供的⼀个⼩⼯具:可以查看、创建、更新ZIP格式的⽂档附件
9、ddms和traceview的区别:ddms是⼀个程序执⾏查看器,在⾥⾯可以看见线程和堆栈等信息,traceview是程序性能分析器。
PS:traceview是Android平台特有的数据采集和分析⼯具。
10、Activity:四⼤组件之⼀,是Context的⼦类,通常⼀个⽤户交互界⾯对应⼀个activity。
Activity的⽣命周期:
重写onSaveInstanceState()⽅法,接受⼀个Bundle类型的参数,可以将状态存储到Bundle对象中,当重启activity调⽤它onCreate()⽅法时,Bundle将作为实参传递给onCreate()
横竖屏切换时Activity的⽣命周期:
不设置Activity的android:configChanges时,切屏会重新调⽤各个⽣命周期。切横屏会执⾏⼀次,竖屏两次
设置android:configChanges=“orientation”时,切屏也还会调⽤各个⽣命周期,切横、竖屏时只会执⾏⼀次
设置android:configChanges=“orientation|keyboardHidden”时,不会重新调⽤各个⽣命周期,只会执⾏onConfigurationChanged⽅法
将Activity设置成窗⼝的样式:
在Manifest中将主题设置成Dialog样式
如何退出Activity?如何安全退出已调⽤多个Activity的Application?
(1) ⼀般情况下,⽤户按back键就可以退出Activity,直接调⽤finish().
(2) 记录打开的activity,每打开⼀个就记录下来,在需要退出的时候,关闭每⼀个activity即可
(3) 发送特定⼴播,在需要退出的时候,发送⼀个特定的⼴播,每个Activity收到⼴播的时候,关闭即可。
(4)在打开新的Activity时候,使⽤startActivityforresult,在onActivityResult中处理,递归关闭。
Activity的四种启动模式:
standard:每启动⼀次都要创建新的实例,不管实例有没有存在。
singleTop:栈顶复⽤,若在栈顶就不⽣成新的实例,如果在栈顶就调⽤onNewIntent复⽤。应⽤在在当前的Activity中启动同类型的Activity
singleTask:栈内复⽤,只要存在栈内就不创建新的实例,其余实例出栈,应⽤在主页
singleInstance:单例模式,系统会给该Activity单独创建⼀个栈
11、Service:四⼤组件之⼀,主要执⾏⼀些不需要与⽤户交互且要求长期运⾏的任务,后台任务的处理
Service是否在main thread中执⾏,service⾥是否能执⾏耗时操作?
默认情况下,service和activity是运⾏在当前app所在进程的main thread⾥⾯,所以service⾥⾯不能执⾏耗时的操作。特殊情况下,可以在清单⽂件配置service执⾏所在的进程,让service在另外进程中执⾏。
Activity如何绑定service,如何在Activity中启动⾃⼰对应的Service?
Activity通过bindService(Intent service,ServiceConnection conn,int flags)跟service绑定,,当绑定成功后service会将代理对象通过回调的形式传给conn,就能拿到Service提供的服务代理对象。
在Activity中通过startService()和bindService()来启动服务,想要获取Service服务对象就通过bindService,若仅仅想要开启⼀个后台服务,就是要
startService()调浮标
StartService启动服务,调⽤者和服务之间没有关联,如果是调⽤者直接退出没有调⽤stopService的
话,Service⼀直在后台运⾏,⽤BindService启动服务,调⽤者和服务绑定了,调⽤者⼀旦退出,Service也就终⽌。
Service⽣命周期:
⾮绑定模式:onCreate()、onStartCommand()、onDestroy()
绑定模式:onCreate()、onBind()、onUnbind()、onDestroy()
什么是IntentService,有何有点?
IntentService是Service的⼦类,可以根据需要处理异步请求(表⽰为Intent)。
重复调⽤StartService()或bindService()会怎么样?
第⼀次调⽤服务时候,会先调⽤onCreate()再调⽤onStartCommand()。若在这个⽣命周期内,再次启动服务,则直接调⽤onStartCommand(),onBind()也只执⾏⼀次
Actiivty、Service、Intent的关系:
Activity和Service都是四⼤组件,都是Context的⼦类ContextWrapper的⼦类,Activity负责⽤户界⾯的
交互和显⽰,Service负责后台任务的处理,Activity和Service通过Intent传递数据,Intent可看成是通信使者。
Service和线程都是开启后台服务,什么时候使⽤Service和线程:
1、Service默认运⾏在主线程中,执⾏耗时操作时在线程中开启。
2、Service优先级⾼于后台挂起的Activity或者Thread,所以当系统资源不够时候优先杀死Activity和Thread。
3、Thread运⾏独⽴于Activity,也就是当Activity被finish之后,如果没有主动停⽌Thread或者Thrad⾥⾯的run⽅法未执⾏完,Thread也会⼀直执⾏,这时候,当Activity 被finish之后不再持有该线程,⽆法控制之前创建的线程,⽽Service可以。
12、BroadCastReceiver :四⼤组件之⼀,主要⽤于接收系统或app发送的⼴播事件。可以进⾏进程间通信
分为有序⼴播和⽆序⼴播:
⽆序⼴播:完全异步,可以被所有⼴播接收者收到,效率⾼,但是⽆法将处理结果传给下个接收者,没有顺序,⽆法被截断。
有序⼴播:同步执⾏的⼴播,⼴播发出后同⼀时间只能有⼀个⼴播接收器接收到⼴播,当优先级⾼的⼴播接收器的onReceiver⽅式运⾏结束后,⼴播才会继续,当前⼴播也可以截断⼴播,不继续向下传递。
引⽤⼴播的⽤意:
(1)程序间的互通消息
(2)Android的四⼤组件本质上也就是为了实现移动设备上的MVC架构,可以⽅便⼏⼤组件的信息和数据交互
注册⼴播的两种⽅式:
静态注册:在清单⽂件中为BroadcastReceiver注册,使⽤<receiver>标签声明,并在标签内<Intent-filter>标签设置过滤器。⽣命周期伴随整个应⽤。=>常驻型⼴播,应⽤程序关闭后还是会收到⼴播
塑料提手动态注册:在代码中定义并设置好IntentFilter对象,然后在需要注册的地⽅调⽤isterReceiver()⽅法,调⽤Context.unregisterReceiver()⽅法取消注册。=>⾮常驻型⼴播,跟随Activity⽣命周期,当程序关闭时,该接收器会被销毁
PS:
BroadcastReceiver⽣命周期很短,从接收⼴播创建到onRecrive()⽅法结束后销毁。
⼴播接收者中不要做⼀些耗时操作,会弹出ANR
耗时较长的⼯作最好在服务中完成
动态⼴播注册在onResume和onPause中注册或销毁,因为onpause在App杀死前⼀定会被执⾏,从⽽保证⼴播在App在死亡前进⾏销毁,防⽌内存泄漏,再者,当系统内存不⾜时,在回收Activity占⽤的资源时,activity在执⾏完onPause后就会被销毁。
13、ContentProvider:四⼤组件之⼀,应⽤程序之间共享数据的接⼝
使⽤⽅法:⾃定义⼀个类继承ContentProvider,然后覆写query、insert、update、delete等⽅法,第三⽅可以通过ContentResovler来访问该Provider。
Android的数据存储⽅式:File存储、ContentProvident存储、SharedPreference存储、SQLiteDateBase存储、⽹络存储
ContentProvider和sql的区别:ContentProvider屏蔽了数据存储的细节,只需要关⼼操作数据的uri就可以了,它可以实现不同app之间的共享,sql只能查询本应⽤下的数据库
说说ContentProvider、ContentResolver、ContentObserver之间的关系:
ContentProvider 内容提供者,⽤于对外提供数据
ContentResolver:内容解析者,⽤于获取内容提供者提供的数据
ContentObserver:内容,可以监听数据的改变状态。
14、Android中的⼏种布局⽂件
线性布局(LinearLayout):⽔平/垂直
相对布局(RelativeLayout):根据参照物的位置来定位控件的位置
框架布局(FrameLayout):放⼊的控件都被放到左上的区域。
表格布局(TableLayout):通过表格⽅式布局(⾏/列)来布局控件的位置
绝对布局(AbsoluteLayout):采⽤坐标轴的⽅式定位控件
约束布局(ConstraintLyout):控件之间存在相应的位置关系。优点:减少布局层级使⽤(复杂布局)以及速度快,性能⾼
Padding和Margin区别:
padding站在⽗view的⾓度描述问题,规定它⾥⾯的内容与这个⽗view边界的距离,margin是站在⾃⼰的⾓度描述问题,规定⾃⼰上下左右的距离。
padding是内边距,margin是外边距
打包交易
15、ListView
ListView如何提⾼效率
(1)复⽤ConvertView(优化加载布局问题):减少findviewById的使⽤次数,每个item都会创建⼀个view对象,这⾮常耗内存,为了节约内存可在converView不为null 的时候复⽤。
(2)⾃定义静态类ViewHolder(优化加载控件):缓存item条⽬(优化getView()中每次调⽤findviewById⽅法来获取⼀次控件的代码)
(3)使⽤分页加载:优化查询数据,优化内存
(4)使⽤分段加载:优化⽤户体验,⽐如10000条数据,要全部加载完才显⽰,会影响⽤户体验
ListView数据集发⽣改变后,如何更新ListView?
调⽤adapter的notifyDataSetChanged⽅法
如何定位到指定位置:listview.Selection(2)
16、Java中引⽤类型都有哪些?作⽤是什么?
⼏种引⽤类型:强引⽤、软引⽤、弱引⽤、虚引⽤
引⽤类型的作⽤:使得程序可以更好的控制对象⽣命周期,帮助缓解和处理内存泄漏的问题。
强引⽤:必不可少的,Object object=new Object();这是⼀个强引⽤,若⼀个对象具有强引⽤,垃圾回收器绝不会回收它,哪怕内存控件不⾜时,java虚拟器宁愿抛出OutOfMemoryError错误,使程序异常终⽌也不会回收。
软引⽤:可有可⽆,当内存空间⾜够了就不会回收,当内存空间不⾜时,就会回收这些对象的内存。
软引⽤⽤来实现内存敏感的⾼速缓存
弱引⽤:可有可⽆,不管内存⾜够与否,都会回收它的内存,它与软引⽤的区别在于弱引⽤的对象具有更短暂的⽣命周期
虚引⽤:虚引⽤并不会决定对象的⽣命周期,任何时候都可能被垃圾回收。主要⽤来跟踪垃圾回收的活动。
17、JNI(Java Native Interface)和NDK(Native Development Kit)
JNI作⽤:使得Java与本地其他语⾔类(C/C++)交互,它是属于Java的,与Android没有关系。
NDK:Android的⼀个⼯具开发包,快速开发C、C++的动态库。
18、Intent传递:
可以传递哪些数据类型:java的基本数据类型和String以及他们的数组格式,还传递Serializable和Parcelabele接⼝的对象
19、Serializable和Parcelable的区别:
1.在使⽤内存的时候,Parcelable(直接在内存中读写)⽐Serializable(使⽤IO读写存储在硬盘上)性能⾼,所以推荐使⽤Pacelable.
2.Serializable在序列化的时候会产⽣⼤量的临时变量,从⽽引起频繁的GC(垃圾回收机制)
3.Parcelable不能使⽤在要将数据存在磁盘上的情况
4.Parcelable是android的,Serializable是java的
20、Intent和IntentFilter的区别
Intent代表了Android应⽤的启动意图,Android应⽤根据这个Intent来启动指定组件。IntentFilter相当于Intent的过滤器,应⽤开发完后,需要⽤IntentFilter告诉Android系统能处理哪些隐式的Intent请求,主要通过data、category、action三⽅⾯

本文发布于:2024-09-23 02:15:23,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/277477.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据   服务   内存   时候   程序
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议