Android基础知识问答

前天和昨天回忆了一些Android方面的基础知识,发现一阵时间不复习,对其描述的语言组织的就不是太流畅,我将其归结于自己对其的不熟悉,因此以问答形式记录一部分问题。

1、(最基础的)Java中的基本数据类型:

一共有8种,byte,int,shot,long,char,boolean,float,double。

2、Amdroid系统的架构采用了分层的架构,从高层到底层分别是:

(1) 应用程序。

              Android会同一系列核心应用程序包一起发布,该应用程序包包括:email客户端、SMS短消息程序、日历、地图、浏览器、联系人管理程序等,所有的应用程序都是使用JAVA语言编写。

(2) 应用程序框架。

             开发人员完全访问核心应用程序所使用的API框架(android.jar)。该应用程序的架构设计简化了组件的重用,任何一个应用程序都可以发布他的功能块并且任何其他的应用程序都可以使用其所发布的功能块。

(3) 系统运行库。

             Android包含一些C/C++库,这些库能被Android系统中不同的组件使用,他们通过Android应用程序框架为开发者提供服务。

(4) Linux内核。

            Android的核心系统服务依赖于Linux 2.6内核,如安全性、内存管理、进程管理、网络协议和驱动模型,Linux内核同时作为硬件和软件栈之间的抽象层。

3、Android的数据存储方式。

           一共5种。

(1 )sharedPreferences存储数据:它是Android提供的用来存储一些简单配置信息的一种机制,采用了XML格式将数据存储在设备中,只能在同一个包中使用,不能再不同的包之间使用。

(2 )文件存储数据:文件存储是一种较常用的方法,在Android中读取/写入文件的方法与JAVA中I/O流的程序是完全一样的,提供了openFileInput()和openFileOutput()方法来读取设备上的文件。

(3 )SQLite数据库存储数据:SQLite是ANdroid所带的一个标准的数据库,它支持SQL语句,他是一个轻量级的嵌入式数据库。

(4 )ContentProvider存储数据:主要用于应用程序之间进行数据交换,从而能够让其他程序或者读取此ContentProvider的各种数据类型。

(5 )网络存储数据:通过网络上提供给我们的存储空间来上传(存储)和下载(读取)我们存储在网络空间中的数据信息。

4、Android中4大组件有哪些?他们的作用是什么?

Activity: Activity是Android程序与用户交互的窗口,是Android构造块中最基本的一种,它主要为保持各界面的状态做很多持久化的事情,妥善管理生命周期以及一些跳转逻辑。

Service:后台服务于Activity,封装有一个完整的功能逻辑实现,接受上层指令,完成相关的事务,定义好需要接受的Intent提供同步和异步的接口。

ContentProvider:是Android中提供的第三方应用数据的访问方案,可以派生ContentProvider类,对外提供数据,可以像数据库一样进行选择排序,屏蔽内部存储的存储细节,向外提供统一的数据接口模型,大大简化上层应用对数据的整合提供了更方便的途径。

BroadcastReceiver:接受一种或者多种Intent作触发事件,接受相关消息,做一些简单处理,转换成一条Notification,统一了Android的事件广播机制。

5、Activity的生命周期?

onCreat():创建Activity时调用,设置在该方法中,还以Bundle的形式提供对以前存储的任何状态的访问。

onStart():Activity变为在屏幕上时对用户可见时使用。

onResume():Activity开始与用户交互时调用,(无论是启动还是重新启动一个活动时,该方法总是被调用)。

onPause():Activity被暂停或是收回cpu和其他资源时调用,该方法用于保存活动的状态。

onRestart():重新启动Activity时刁颖,该活动仍然在栈中,而不是启动新的活动。

onStop():Activity被停止并转为不可见阶段及后续的生命周期事件时调用。

onDestroy():Activity被完全从系统内存中移除时调用。

6、Activity的4种启动模式,他们有哪些特点?

standard ----------默认模式,来了intent,每次都创建新的实例。

singleTop ---------来了intent,每次都创建新的实例,仅有一个例外:当栈顶的Activity恰恰就是该Activity的实例(即需要创建的实例)时,不需要再创建新实例,这解决了栈顶复用的问题。(用户体验时,连续按两次back键,退出的都是同一个Activity,感觉肯定不好)

singleTask --------来了intent,检查栈中是否存在该Activity的实例,如果存在就把intent发送给它,如果不存在,就创建一个新的该Activity的实例,栈中只能有它一个该Activity实例,但允许其他Activity加入该栈,解决了在一个Task中共享一个Activity。

singleInstance ------肯定位于一个Task的栈顶,并且是该栈唯一的Activity,解决了多个Task共享一个Activity。

7、注册广播有几种方式?有何特点?

(1)动态注册:不是常驻型广播,也就是说广播跟随程序的生命周期。

(2)静态注册:在清单文件中注册,是常驻型广播,即当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行。

8、启动一个Service有几种方式?说出他们之间的主要区别,他们的生命周期有些不同?

(1)调用startService():通过此种方法启动的service会一直运行在后台直到stopService或者stopSelf()方法被调用。

生命周期: 启动时,startService  --> onCreat()  --->  onStart() ,停止时,stopService  ---->  onDestroy(),如果调用者直接退出而没有停止service时,则service会一直在后台运行Context.startService()方法启动服务,在服务未被创建时,系统会先调用onCreat()方法,接着调用onStart()方法。如果调用startService()方法前,服务已经被创建,多次调用startService()方法并不会导致多次创建服务,但会导致多次调用OnStart()方法,采用StartService()方法启动的服务,只能调用COntext.stopService()方法结束服务,服务结束时会调用onDestroy()方法附代码。

(2)调用BindService():通过此种方法启动的service会与调用者绑定,如果这个service还没有被启动,那么service启动时将不会调用onStart(),只会调用onCreat()和onBind(),调用者被销毁时,service也会被销毁。

生命周期:绑定时,bindService  ---->  onCreate()   ---->  onBind() ,调用者退出了,即解除绑定时,unbindService   --->  onUnbind()  ---->  onDestroy()。绑定service需要传入三个参数,bindService(intent, conn ,  Service.BIND_AUTO_CREATE ); 第一个:intent对象,第二个:ServiceConnection对象,创建该对象要实现它的onServiceConnected()和onServiceDisconnected()来判断连接成功或者是断开连接。第三个:如何创建Service,一般指定绑定的时候自动创建。

9、进程间通信机制,传统IPC和Binder。

传统的进程间通信机制IPC有管道(pipe)、信号(signal)和跟踪(Trace),这三项通信手段只能用于父进程和子进程之间,后来又增加了命令管道(Named Pipe),使得进程间通信不再局限于父进程与子进程或兄弟进程之间。后来又出现了报文队列(Message)、共享内存(Share Memory)和信号量(SemaPhore)。

Android系统没有采用上述提到的各种进程间通信机制,而是采用Binder机制,它是基于OpenBinder来实现的。它提供了远程过程调用(RPC)功能,在Android系统的Binder机制中,有一系列组件包括Client、Server、ServiceMessage、和Binder驱动程序。

10、谈谈Android内存优化的方法,方案,规则及对内存泄露如何避免?

OOM即Out Of Memory,一般是由程序编写者对内存使用不当,如对该释放的内存资源没有释放,导致其一直不能再次被使用而是内存被耗尽的现象。根本的解决办法是对代码进行优化:在内存引用上做些处理,使用软引用、虚引用、弱引用;在内存中加载图片时直接在内存中作处理,如边界压缩等;建立动态回收内存机制;优化Dalvik虚拟机的对内存分配;自定义堆内存大小等。

一般而言,android种常见的原因主要有以下几个:

(1)数据库的cursor没有关闭。

(2)构造adapter没有使用缓存contentView。

(3)调用registerReceiver()后未调用unregisterReceiver()。

(4)未关闭InputStream/OutputStream。

(5)bitmap使用后未调用recycle()。

(6)Context泄露。

(7)static关键字等。










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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值