Android 面试题 android中级—初级—知识点

// Android 的中等知识理解

1 自定义控件

2 在android中跨进程之间通讯有那几种 ?

3 RecyclerView 了解情况

4 Android Fragment和Fragment之间怎么传递数据的

5 Fragment 如何给 activity 传递数据

6 回调接口 的通俗理解 ( 这块我还是不是特别的清晰 )

7 Android中的几种动画 ?

8 Android的通用设计模式???

9 自己没有对自己写过的代码进行一个封装 ?? 你是怎么封装的 ?? 封装的目的就是不为了让代码重复 ??

10 AsyncTask 异步任务的理解

11 相关的加密技术了解 ??

12 Android与Js交互 ?? Android 调用JS的方法, JS 调用 Android 方法;

13 RecyclerView复用机制 ??

==========================================================================================================================

(1) 自定义控件

测量- onMeasure 过程是用于测量视图的大小

布局- onLayout 过程用于设置视图在屏幕中显示的位置

绘制- onDraw 过程主要用于利用前两步得到的参数,将视图显示在屏幕上,到这里也就完成了整个的视图绘制工作。

画布Canvas的用法

Canvas提供了下列2类方法:

(1)在区域内部绘制图形该类方法用来绘制各种基本几何图形。

(2)画布的控制操作控制操作包括旋转、缩放、平移以及存取画布状态的操作。

画笔Paint的用法:

//锯齿效果
//设置画笔的颜色 //防抖动 //设置阴影 //设置画笔的风格(空心或实心)
//设置空心边框的宽度

(2) 在android中跨进程之间通讯有那几种

其中Activity可以跨进程调用其他应用程序的Activity;

跨进程访问Activity(访问其他应用程序中的Activity)主要是通过一个Action来完成的,如果要传递数据,还需 要指定一个Uri。当然,
传递数据也可以通过Intent来完成。传递数据的过程可以是双向的。如果要想从调用的Activity中返回数据,就需要使用
startActivityForResult方法来启动Activity了。

(3) RecyclerView 了解情况

RecyclerView提供了三种内置的LayoutManager

整体上看Recyclerview架构,提供了一种插拔式的体验,高度的解耦,异常的灵活,通过设置它提供的不同

LinearLayoutManager:线性布局,横向或者纵向滑动列表

GridLayoutManager:表格布局

StaggeredGridLayoutManager:流式布局,例如瀑布流效果

首先这边我们需要继承RecyclerView.Adaper类,然后实现两个重要的方法onBindViewHodler0以及onCreateViewHlolder0,这边我们看出来
区别,使用RecyclerView控件我
们就可以把Item View视图创建和数据绑定这两步进行分来进行管理,用法就更加方便而且灵活了,并且我们
可以定制打造千变万化的布局。同时这边我们还需要创建一个!
ViewHolder类,该类必须继承自Recyclerview.ViewHolder类,现在Google
也要求我们必须要实现ViewHolder来承载Item的视图。

3.1 .RecyclerView分隔线实现(ItemDecoration)

3.2 RecyclerView (监听事件处理)

对于RecyclerView来讲,非常可惜的时候,该控件没有给我们提供这样的内置监听器方法,不过我们可以进行改造实现

LayoutManager, ItemDecoration, ItemAnimator

RecyclerviewtbListView多两级缓存

(4) Android Fragment和Fragment之间怎么传递数据的

通过共同的Activity传递(主要方法)
在Activity里面添加一个字段、来临时保存要一些值。在Activity中定义一个字段、然后添加set和get方法。

(7)Android的几种动画

Android包含三种动画:

ViewAnimation、 Drawable Animation、 Property Animation

ViewAnimation (Tween Animation补间动画):

基于View的渐变动画,只改变了View的绘制效果,实际属性值未变。在代码中定义动画

DrawableAnimation(Frame Animation帧动画):

加载一系列Drawable资源来创建动画,这种传统动画某种程度上就是创建不同图片序列,顺序播放,就像电影胶片。在代码中定义动画帧

PropertyAnimation(属性动画):

动画的对象除了传统的View对象,还可以是Object对象,动画之后,Object对象的属性值被实实在在的改变了。Property animation能够通过改变View对象的实际属性来实现View动画。任何时候View属性的改变,View能自动调用invalidate()来刷新。

(10) AsyncTask 异步任务的理解

  1. AsyncTask是Android提供的一个助手类,它对Thread和Handler进行了封装,方便我们使用。Android之所以提供AsyncTask这个类,就是
    为了方便我们在后台线程中执行
    操作,然后将结果发送给主线程,从而在主线程中进行UI更新等操作。

2.AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通
过接口实现UI进度更新),最后反馈执行
的结果给UI主线程.

3个泛型

当我们定义一个类来继承AsyncTask这个类的时候,我们需要为其指定3个泛型参数:

AsyncTask <Params, Progress, Result>

Params:这个泛型指定的是我们传递给异步任务执行时的参数的类型,对应的方法是doinBackground(Params… params)

Progress:这个泛型指定的是我们的异步任务在执行的时候将执行的进度返回给UI线程的参数的类型,对应的方法是publishProgress(Progress)

Result:这个泛型指定的异步任务执行完后返回给UI线程的结果的类型,对应方法是onPostExecute(Result… esult)

4个步骤

当我们执行一个异步任务的时候,其需要按照下面的4个步骤分别执行

onPreExecute0:这个方法是在执行异步任务之前的时候执行,并且是在UI Thread当中执行的,通常我们在这个方法里做一些UI控件的初始
化的操作,例如弹出要给
ProgressDialog

dolnBackground(Params… params)在onPreExecute0方法执行完之后,会马上执行这个方法,这个方法就是来处理异步任务的方法,Android操作系

统会在后台的线程池当
中开启一个worker thread来执行我们的这个方法,所以这个方法是在Worker thread当中执行的,这个方法执行完之后就可以

将我们的执行结果发送给我们的最后一个
onPostExecute 方法,在这个方法里,我们可以从网络当中获取教据等一些耗时的操作

// pu rua 个 ruai si Progress

onProgressUpdate(Progess… values):这个方法也是在UI Thread当中执行的,我们在异步任务执行的时候,有时候需要将执行的进度返回给我们的UI界面,例如下载一张网
络图片,我们需要时刻显示其下载的进度,就可以使用这个方法来更新我们的进度。这个方法在调用之前,我们需要在 dolnBackground 方法中调用一个 publishProgress
(Progress)的方法来将我们的进度时时刻刻传递给 onProgressUpdate 方法来更新

onPostExecute(Result…result):当我们的异步任务执行完之后,就会将结果返回给这个方法,这个方法也是在UI Thread当中调用的,我们可以将返回的结果显示在U控件上

(11) 相关的加密技术了解 ??

在Android开发中,一般只用到Base64,MD5,RSA,DES。

MD5、SHA、HMAC这三种加密算法

MD5加密是一个比較经常使用的算法,最常见的使用场景就是在帐号注冊时,用户输入的password经md5加密后,传输至server保存起来。

(12) Android与Js交互 ?? Android 调用JS的方法, JS 调用 Android 方法;

Android 调用 js方法

//加载本地htm文件:

1 webView = findViewByld(Rid.webview);

//设置WebView允许调用js

2webView.getSettings0.setJavaScriptEnabled(true);

3 webview.IoadUr(“file:///android_ asset/show.html”);

js调用安卓方法:

首先,需要在activity中定义被调用的方法:

1 @JavascriptInterface

2 public void hello(String msg){

3
Toast.makeText(this, msg, Toast.LENGTH_SHORT),show0;

}

并且需要给webview绑定 上java对象:

1 webView.addJavascriptinterface(this,“justTest”);
最后,在js中调用该方法:

1 调用安卓方法

@Override

protected void onCreate(Bundle savedinstanceState){

super.onCreate(savedinstanceState);

setContentView(R.layout:activity_main);

wview =(WebView) findViewByid(Rid.wView);

wiew.loadurl(“file:///android_asset/demo1.html”);

WebSettings webSettings = wiew.getSettings0;

//①设置WebView允许调用js

webSettings.setJavaScriptEnabled(true);

webSettings.setDefaultTextEncodingName(“UTF-8”);

//②设置支持js调用java

wiew.addlavascriptinterface(new AndroidAndISInterface0,“Android”";

Class AndroidAndJSInterface{

@Javascriptinterface

public void showToast(){

Toast.makeText(MainActivity.this,“我被js调用了”,Toast.LENGTH_SHORD).show0;

}

(13) RecyclerView复用机制

回收:当一个itemView从可见到不可见时,RecyclerView利用回收机制,将它存放到了内存中,以便其他item出现时,不用每次都去

new一个新的itemView,而是只去 onBindViewHolder绑定数据就行了.

复用:滑动过程中出现了新的itemView,不用每次都去new,而是优先从缓存中去拿,缓存不能满足需求,再去 执行onCreateViewHolder

创建新的itemView并封装到viewHolder中

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>