Android 知识点(1)

1.怎么实现通知栏到聊天界面的跳转

Intent intent = new Intent(Intent.ACTION_MAIN);

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); //这样可以清掉所有历史activity

intent.addCategory(Intent.CATEGORY_HOME);

startActivity(intent);

new一个新的Intent然后用上述方法即可实现跳转。

2.聊天界面左右分隔怎么实现,怎么实现优化使其不出现错位

我们可以在adapter里对消息的发放者进行判断,如果不是本人发送的那就设置靠左,否则设置靠右,具体实现如下:

封装消息实体类时,将消息的发送者类型作为Boolean类型存入。在适配数据时,准备两种item_layout布局文件,一种用于别人的信息展示,另一种用于自己的信息。getView方法加载布局文件之前对消息的发放者进行判断,如果是本人发送,则加载靠右的布局,否则则使用靠左的布局文件,从而实现动态的位置改变

3.视频,音频的上传

Android的视频音频上传主要就是通过java的socket来进行与服务器的交流,socket通信可以指定一个服务器的地址,然后可以通过io流实现视频音频的上传。

4.http协议和soap协议的区别

HTTP(超文本传输协议)是利用TCP在两台电脑(通常是Web服务器和客户端)之间传输信息的协议。客户端使用Web浏览器发起HTTP请求给Web服务器,Web服务器发送被请求的信息给客户端。

SOAP(Simple Object Access Protocal,简单对象访问协议) 技术有助于实现大量异构程序和平台之间的互操作性,根据我有限的了解,SOAP是把成熟的基于HTTP的WEB技术与XML的灵活性和可扩展性组合在了一起。比如我们.NET中的WEB服务,就是基于SOAP。

简单对象访问协议(SOAP)是W3C组织的一个Note, 它描述了一种在分散的或分布式的环境中如何交换信息的轻量级协议。SOAP是一个基于XML的协议,它包括三个部分:SOAP封装(Envelop),封装定义了一个描述消息中的内容是什么,是谁发送的,谁应当接受并处理它以及如何处理它们的框架;SOAP编码规则(Encoding Rules),用于表示应用程序需要使用的数据类型的实例;SOAP RPC表示(RPC Representation),表示远程过程调用和应答的协定;SOAP可以和多种传输协议绑定(Binding),使用底层协议交换信息。在这个文档中,目前只定义了SOAP如何和HTTP以及HTTP扩展进行绑定的框架。

SOAP是个通信协议, SOAP在HTTP协议的基础上,把编写成XML的REQUEST参数, 放在HTTP BODY上提交个WEB SERVICE服务器(SERVLET,ASP什么的) 处理完成后,结果也写成XML作为RESPONSE送回用户端, 为了使用户端和WEB SERVICE可以相互对应,可以使用WSDL作为这种通信方式的描述文件,利用WSDL工具可以自动生成WS和用户端的框架文件,SOAP具备把复杂对象序列化捆绑到XML里去的能力。

SOAP的前身是RPC, 就是远程呼叫处理的协议,这个协议安全性不是很好,多数防火墙都会阻挡RPC的通信包,而SOAP则使用HTTP协议作为基本的协议,使用端口80使得SOAP可以透过防火墙,完成RPC的功能。

SOAP协议和HTTP协议一样,都是底层的通信协议,只是请求包的格式不同而已,SOAP包是XML格式的,现在我们编写WEB SERVICE不需要深入理解SOAP也没关系。如果SERVICE和CLIENT在同样的环境下使用SOAP,由于一般情况下都有自动生成SOAP程序框架的工具,因此不知道细节也没关系. 可是, 如果CLIENT和SERVICE的环境不同,比如说JAVA的Client和.NET的SERVICE进行通信,或者是VB CLIENT和TOMCAT下的JAVA SERVICE通信,还是要知道一点细节为好. 特别是, WSDL或者UDDI都不是标准,如果不让用就只好手工配制SOAP MESSAGE啦。

5.http和https的区别

在URL前加https://前缀表明是用SSL加密的。你的电脑与服务器之间收发的信息传输将更加安全。 Web服务器启用SSL需要获得一个服务器证书并将该证书与要使用SSL的服务器绑定。 http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议

要比http协议安全

HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议

它是一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务器之间交换信息。它使用安全套接字层(SSL)进行信息交换,简单来说它是HTTP的安全版。

它是由Netscape开发并内置于其浏览器中,用于对数据进行压缩和解压操作,并返回网络上传送回的结果。HTTPS实际上应用了Netscape的安全全套接字层(SSL)作为HTTP应用层的子层。(HTTPS使用端口443,而不是象HTTP那样使用端口80来和TCP/IP进行通信。)SSL使用40 位关键字作为RC4流加密算法,这对于商业信息的加密是合适的。HTTPS和SSL支持使用X.509数字认证,如果需要的话用户可以确认发送者是谁。

HTTPS和HTTP的区别:

https协议需要到ca申请证书,一般免费证书很少,需要交费。

http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议

http和https使用的是完全不同的连接方式用的端口也不一样,前者是80,后者是443。

http的连接很简单,是无状态的

HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议 要比http协议安全

HTTPS解决的问题:

1 . 信任主机的问题. 采用https 的server 必须从CA 申请一个用于证明服务器用途类型的证书. 改证书只有用于对应的server 的时候,客户度才信任次主机. 所以目前所有的银行系统网站,关键部分应用都是https 的. 客户通过信任该证书,从而信任了该主机. 其实这样做效率很低,但是银行更侧重安全. 这一点对我们没有任何意义,我们的server ,采用的证书不管自己issue 还是从公众的地方issue, 客户端都是自己人,所以我们也就肯定信任该server.

2 . 通讯过程中的数据的泄密和被窜改

1. 一般意义上的https, 就是 server 有一个证书.

a) 主要目的是保证server 就是他声称的server. 这个跟第一点一样.

b) 服务端和客户端之间的所有通讯,都是加密的.

i. 具体讲,是客户端产生一个对称的密钥,通过server 的证书来交换密钥. 一般意义上的握手过程.

ii. 加下来所有的信息往来就都是加密的. 第三方即使截获,也没有任何意义.因为他没有密钥. 当然窜改也就没有什么意义了.

2. 少许对客户端有要求的情况下,会要求客户端也必须有一个证书.

a) 这里客户端证书,其实就类似表示个人信息的时候,除了用户名/密码, 还有一个CA 认证过的身份. 应为个人证书一般来说上别人无法模拟的,所有这样能够更深的确认自己的身份.

b) 目前少数个人银行的专业版是这种做法,具体证书可能是拿U盘作为一个备份的载体.

HTTPS 一定是繁琐的.

a) 本来简单的http协议,一个get一个response. 由于https 要还密钥和确认加密算法的需要.单握手就需要6/7 个往返.

i. 任何应用中,过多的round trip 肯定影响性能.

b) 接下来才是具体的http协议,每一次响应或者请求, 都要求客户端和服务端对会话的内容做加密/解密.

i. 尽管对称加密/解密效率比较高,可是仍然要消耗过多的CPU,为此有专门的SSL 芯片. 如果CPU 信能比较低的话,肯定会降低性能,从而不能serve 更多的请求.

ii. 加密后数据量的影响. 所以,才会出现那么多的安全认证提示

6.listview的逐行显示

可以将每一条数据先加载到list集合中,然后通过适配器将每一条数据加载到listview中实现listview对数据的逐行显示。

7.edittext中文字的下划线效果

自定义一个·EditText的派生类,LineEditText,在LineEditText类的OnDraw函数中实现画一条下划线的功能

8.activity以及service的生命周期

activity

onCreate(Bundle savedInstanceState)第一次创建时调用

onStart()被用户可见时调用

onRestart()当Activity处于stop状态又被重新启动时调用

onResume()当获得焦点即可与用户交互时调用

onPause()当失去焦点时调用

onStop()当不可见时调用

onDestroy()当销毁时调用

service

startService:onCreate()-  >onStartCommand()->startService()->onDestroy()

BindService:onCreate()->onBind()->onUnbind()->onDestroy()

9.安卓系统的理解,优缺点

Android一词的本义指“机器人”,同时也是Google于2007年11月5日 宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成。

版本:每个版本代表的甜点的尺寸越变越大,然后按照26个字母数序:纸杯蛋糕(Android 1.5),甜甜圈(Android 1.6),松饼(Android 2.0/2.1),冻酸奶(Android 2.2),姜饼(Android 2.3),蜂巢(Android 3.0),冰激凌三明治(Android 4.0),果冻豆(Jelly Bean,Android4.1和Android 4.2)。

Android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和Linux内核层。

Android开发四大组件分别是:活动(Activity): 用于表现功能。服务(Service): 后台运行服务,不提供界面呈现。广播接收器(BroadcastReceiver):用于接收广播。内容提供商(Content Provider):支持在多个应用中存储和读取数据,相当于数据库。

优点:开放性,挣脱束缚,丰富硬件,Google应用

缺点:版本过多,升级过快

用户体验不一致

10.sim卡EF文件是什么

SIM卡里的所有文件按树来组织:

1>主文件MF(Master File)——每一块SIM卡只有一个唯一的主文件,其他所有文件都是它的子孙,主文件只有文件头,里面存放着整个SIM卡的控制和管理信息

2>专用文件DF(Dedicated File)——也是只有一个文件头,里面存放着整个目录的管理控制信息,专用文件相当于一个目录的根.

3>基本文件EF(Elementary File)——既有文件头,也有文件体,文件头存放该文件的位置和控制信息,文件体存放真正的数据,整个SIM卡中只有基本文件有文件体,也只有基本文件才用来存放数据.

11.安卓文件存储方式

文件的操作模式:

Context.MODE_PRIVATE 为默认的操作模式,代表该文件私有,只能被应用本身使用,覆盖源文件

Context.APPEND 为追加模式,私有的。存在就往文件追加内容

Context.MODE_WORLD_READABLE:表示当前文件可以被其他应用读取

Context.MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入

如果希望文件被其他应用读和写,可以传入:

openFileOutput("zhgang.txt",Context.MODE_WORLD_READABLE+

Context.MODE_WORLD_WRITEABLE);

android有一套自己的安全模型,当应用程序(.apk)在安装时系统就会分配给他一个userid,当该应用要去访问其他资源比如文件的时候

就需要userid匹配。默认情况下,任何应用创建文件,sharedprefernces,数据库都应该是私有的(位于/data/data//files),

其他程序无法访问,除非在创建时指定了Context.MODE_WORLD_READABLE,Context.MODE_WORLD_WRITEABLE,只有这样其他程序才能正确访问

12.intent的功能,如何定义显示intent,隐式intent?

在一个Android应用中,主要是由一些组件组成,(Activity,Service,ContentProvider,etc.)在这些组件之间的通讯中,由Intent协助完成。qxIntent传递过程中,要找到目标消费者(另一个Activity,IntentReceiver或Service),也就是Intent的响应者,有两种方法来匹配:

显示intent:代码简洁明了,执行了函数,就会马上跳转到指定的Activity中(Intent i = new Intent(Test.this, TestB.class);

this.startActivity(i);)。

隐式intent:隐式匹配,首先要匹配Intent的几项值:Action(要执行的动作), Category(要执行动作的目标所具有的特质或行为归类), Data/extras(即执行动作要操作的数据和传递到目的的附加信息),type(要执行的目标Activity所能处理的MIME数据类型)Component

如果填写了Componet就是上例中的Test.class)这就形成了显示匹配。

13.接口和抽象类的区别?

abstract可以修饰抽象方法,而一个类只要有一个抽象方法,就必须用abstract定义该类,即抽象类。

用interface修饰的类,里面的方法都是抽象方法,因此在定义接口的时候,可以直接不加那些修饰,系统会默认的添上去。接口里面的字段都是公有常量,即public static final修饰的字段。

14.string和stringbuffer和stringbuilder区别?

STRING的长度是不可变的,STRINGBUFFER的长度是可变的。如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法。

stringbuilder类被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比StringBuffer要快。两者的方法基本相同。

15.图片的异步加载的方法?

1.利用软引用来缓存图片Bitmap,用图片的URL作为缓存查找的Key;

2.设两级缓存,一级是SoftReference,二级是本地SD卡;

3.如果两级缓存都没取到图片,则从服务器获取,并加入缓存;

4.加载完后通过回调接口通知UI更新;

16.后台的Activity被系统回收怎么办?

除了在栈顶的Activity,其他的Activity都有可能在内存不足的时候被系统回收,一个Activity越处于栈底,被回收的可能性就越大。如果我们没有覆写onSaveInstanceState()方法,此方法的默认实现会自动保存Activity中的某些状态数据,比如Activity中各种UI空间的状态。Android应用框架中定义的几乎所有的UI控件都恰当的实现了onSaveInstanceState()方法,因此当Activity被摧毁和重建时,这些UI控件会自动保存和恢复状态数据。比如EditText控件会自动保存和恢复输入的数据,而CheckBox控件会自动保存和恢复选中状态。开发者只需要为这些控件指定一个唯一的ID(通过设置android:id属性即可),剩余的事情就可以自动完成了。如果没有为控件指定ID,则这个控件就不会进行自动的数据保存和恢复操作。

���H����R

你可能感兴趣的:(Android 知识点(1))