android应用题目题目

2017整理网上的Android面试题 - 简书
2017整理网上的Android面试题
那就要了解Android SDK提供的几个线程间通讯的类。第一个 Handler
,handler在android里面负责发送和处理消息,,通过它可以实现其他线程与主线程之间的消息,第二个 Looper
,looper负责管理线程的消息队列和消息循环。第三个 Message,Mesage 是线程间通讯的的消息载体,比如说你搬运货物的时候,message充当集装箱的功能,里面可以放任何你想要传递的消息。第四个 MesageQueue,MesageQueue是消息队列,先进先出,主要是保存有待线程处理的消息。总的来说
在其他线程中调用Handler.sendMsg()方法,将需要主线程处理的事件 添加到main线程的messagequeue中,main线程通过Looper从消息队列中取出handler发过的这个消息,会毁掉Handler的handlerMessage()方法。二 图片加载图片加载领域的三大领头羊:Glide
,Picasso ,圆角 圆形 高斯模糊 蒙版 裁剪
支持GPUImage 实现诸如 马赛克
明暗度更多滤镜处理。2.1
加载图片的时
转换 圆角 圆形
毛玻璃 支持 动态gif动图的加载动图要使用asGif()方法,传入的图片必须是gif图,其他图会报错,如果不适用asGif*()方法也同样可以加载gif图。在使用加载gif动图的时候 也会遇到 出不来或者加载gif图很慢的情况下
怎么办,可以这样解决Glide.with(this).load(url).asGif().diskCacheStrategy(DiskCacheStrategy.SOURCE).into(imageView); 这个里面是加入了缓存策略, 有四种
result ,但是all和result的缓存策略不可以,none是不换车数据,source 是缓存原型
原图,加上了缓存策略的话解决了这个问题。2.2 Glide
,Picasso 这三种加载图片的时候 类似。我项目里面用的是ImageLoder
;private DisplayImageOptions
options=newDisplayImageOptions.Builder() .cacheInMemory(true).cacheOnDisk(true).considerExifParams(true).bitmapConfig(Bitmap.Config.RGB_565).build();例如:ImageLoader.getInstance().displayImage(proList.get(position).ImageURL,holder.img_pro,options);2.3 Glide
使用 Glide.with(context).load("http://inthecheesefactory.com/uploads/source/glidepicasso/cover.jpg").into(ivImg);
整个库分为 RequestManager(请求管理器),Engine(数据获取引擎)、 Fetcher(数据获取器)、MemoryCache(内存缓存)、DiskLRUCache、Transformation(图片处理)、Encoder(本地缓存存储)、Registry(图片类型及解析器配置)、Target(目标) 等模块。简单的讲就是 Glide 收到加载及显示资源的任务,创建 Request 并将它交给RequestManager,Request 启动 Engine 去数据源获取资源(通过 Fetcher ),获取到后 Transformation 处理后交给 Target。Glide 依赖于 DiskLRUCache、GifDecoder 等开源库去完成本地缓存和 Gif 图片解码工作。2. Glide 优点(1) 图片缓存-&媒体缓存Glide 不仅是一个图片缓存,它支持 Gif、WebP、缩略图。甚至是 Video,所以更该当做一个媒体缓存。(2) 支持优先级处理(3) 与 Activity/Fragment 生命周期一致,支持 trimMemoryGlide 对每个 context 都保持一个 RequestManager,通过 FragmentTransaction 保持与 Activity/Fragment 生命周期一致,并且有对应的 trimMemory 接口实现可供调用。(4) 支持 okhttp、VolleyGlide 默认通过 UrlConnection 获取数据,可以配合 okhttp 或是 Volley 使用。实际 ImageLoader、Picasso 也都支持 okhttp、Volley。(5) 内存友好① Glide 的内存缓存有个 active 的设计从内存缓存中取数据时,不像一般的实现用 get,而是用 remove,再将这个缓存数据放到一个 value 为软引用的 activeResources map 中,并计数引用数,在图片加载完成后进行判断,如果引用计数为空则回收掉。② 内存缓存更小图片Glide 以 url、view_width、view_height、屏幕的分辨率等做为联合 key,将处理后的图片缓存在内存缓存中,而不是原始图片以节省大小③ 与 Activity/Fragment 生命周期一致,支持 trimMemory④ 图片默认使用默认 RGB_565 而不是 ARGB_888虽然清晰度差些,但图片更小,也可配置到 ARGB_888。Frescoo
显示占位图直到加载完成;下载图片;缓存图片;图片不再显示时,从内存中移除;Picasso 使用 Picasso.with(this).load("http://nuuneoi.com/uploads/source/playstore/cover.jpg").fit().centerCrop().into(ivImgPicasso);
整个库分为 Dispatcher,RequestHandler 及 Downloader,PicassoDrawable 等模块。Dispatcher 负责分发和处理 Action,包括提交、暂停、继续、取消、网络状态变化、重试等等。简单的讲就是 Picasso 收到加载及显示图片的任务,创建 Request 并将它交给 Dispatcher,Dispatcher 分发任务到具体 RequestHandler,任务通过 MemoryCache 及 Handler(数据获取接口) 获取图片,图片获取成功后通过 PicassoDrawable 显示到 Target 中。需要注意的是上面 Data 的 File system 部分,Picasso 没有自定义本地缓存的接口,默认使用 http 的本地缓存,API 9 以上使用 okhttp,以下使用 Urlconnection,所以如果需要自定义本地缓存就需要重定义 Downloader。2. Picasso 优点(1) 自带统计监控功能支持图片缓存使用的监控,包括缓存命中率、已使用内存大小、节省的流量等。(2) 支持优先级处理每次任务调度前会选择优先级高的任务,比如 App 页面中 Banner 的优先级高于 Icon 时就很适用。(3) 支持延迟到图片尺寸计算完成加载(4) 支持飞行模式、并发线程数根据网络类型而变手机切换到飞行模式或网络类型变换时会自动调整线程池最大并发数,比如 wifi 最大并发为 4, 4g 为 3,3g 为 2。这里 Picasso 根据网络类型来决定最大并发数,而不是 CPU 核数。(5) “无”本地缓存无”本地缓存,不是说没有本地缓存,而是 Picasso 自己没有实现,交给了 Square 的另外一个网络库 okhttp 去实现,这样的好处是可以通过请求 Response Header 中的 Cache-Control 及 Expired 控制图片的过期时间。2.4 Picasso和Glide在磁盘缓存策略上有很大的不同。Picasso缓存的是全尺寸的,而Glide缓存的是跟ImageView尺寸相同的。2.5
Universal ImageLoader 是很早开源的图片缓存,在早期被很多应用使用。 . ImageLoader 优点(1) 支持下载进度监听(2) 可以在 View 滚动中暂停图片加载通过 PauseOnScrollListener 接口可以在 View 滚动中暂停图片加载。(3) 默认实现多种内存缓存算法这几个图片缓存都可以配置缓存算法,不过 ImageLoader 默认实现了较多缓存算法,如 Size 最大先删除、使用最少先删除、最近最少使用、先进先删除、时间最长先删除等。(4) 支持本地缓存文件名规则定义Picasso 是 Square 开源的项目,且他的主导者是 JakeWharton,所以广为人知。Glide 是 Google 员工的开源项目,被一些 Google App 使用,在去年的 Google I/O 上被推荐,不过目前国内资料不多。Fresco 是 Facebook 在今年上半年开源的图片缓存,主要特点包括:(1) 两个内存缓存加上 Native 缓存构成了三级缓存(2) 支持流式,可以类似网页上模糊渐进式显示图片(3) 对多帧动画图片支持更好,如 Gif、WebP鉴于 Fresco 还没发布正式的 1.0 版本,同时一直没太多时间熟悉 Fresco 源码,后面对比不包括 Fresco,以后有时间再加入对比。二、基本概念在正式对比前,先了解几个图片缓存通用的概念:(1) RequestManager:请求生成和管理模块(2) Engine:引擎部分,负责创建任务(获取数据),并调度执行(3) GetDataInterface:数据获取接口,负责从各个数据源获取数据。比如 MemoryCache 从内存缓存获取数据、DiskCache 从本地缓存获取数据,下载器从网络获取数据等。(4) Displayer:资源(图片)显示器,用于显示或操作资源。比如 ImageView,这几个图片缓存都不仅仅支持 ImageView,同时支持其他 View 以及虚拟的 Displayer 概念。(5) Processor 资源(图片)处理器负责处理资源,比如旋转、压缩、截取等。以上概念的称呼在不同图片缓存中可能不同,比如 Displayer 在 ImageLoader 中叫做 ImageAware,在 Picasso 和 Glide 中叫做 Target。三、共同优点1. 使用简单都可以通过一句代码可实现图片获取和显示。2. 可配置度高,自适应程度高图片缓存的下载器(重试机制)、解码器、显示器、处理器、内存缓存、本地缓存、线程池、缓存算法等大都可轻松配置。自适应程度高,根据系统性能初始化缓存配置、系统信息变更后动态调整策略。比如根据 CPU 核数确定最大并发数,根据可用内存确定内存缓存大小,网络状态变化时调整最大并发数等。3. 多级缓存都至少有两级缓存、提高图片加载速度。4. 支持多种数据源支持多种数据源,网络、本地、资源、Assets 等5. 支持多种 Displayer不仅仅支持 ImageView,同时支持其他 View 以及虚拟的 Displayer 概念。其他小的共同点包括支持动画、支持 transform 处理、获取 EXIF 信息等。三 Android四大组件: Activity、Service、Broadcast Receiver Content Provider3.1 Activity
Activity为Android应用提供里可视化用户界面,如果该Android应用需要多个用户界面,那么这个Android应用将会包含多个Activity,多个Activity组成Activity栈。当前活动的Activity位于栈顶。一个Activity的启动顺序:onCreate()——&onStart()——&onResume()一、 onCreate :当活动第一次启动的时候,触发该方法,可以在此时完成活动的初始化工作。 onCreate 方法有一个参数,该参数可以为空( null ),也可以是之前调用 onSaveInstanceState ()方法保存的状态信息。
onStart :该方法的触发表示所属活动将被展现给用户。
onResume :当一个活动和用户发生交互的时候,触发该方法。
onPause :当一个正在前台运行的活动因为其他的活动需要前台运行而转入后台运行的时候,触发该方法。
onStop :当一个活动不再需要展示给用户的时候,触发该方法。如果内存紧张,系统会直接结束这个活动,而不会触发 onStop 方法。 所以保存状态信息是应该在onPause时做,而不是onStop时做。活动如果没有在前台运行,都将被停止或者Linux管理进程为了给新的活动预留足够的存储空间而随时结束这些活动。因此对于开发者来说,在设计应用程序的时候,必须时刻牢记这一原则。在一些情况下,onPause方法或许是活动触发的最后的方法,因此开发者需要在这个时候保存需要保存的信息。
六、onRestart :当处于停止状态的活动需要再次展现给用户的时候,触发该方法。
七、 onDestroy :当活动销毁的时候,触发该方法。和 onStop 方法一样,如果内存紧张,系统会直接结束这个活动而不会触发该方法。·
onSaveInstanceState :系统调用该方法,允许活动保存之前的状态,比如说在一串字符串中的光标所处的位置等。 通常情况下,开发者不需要重写覆盖该方法,在默认的实现中,已经提供了自动保存活动所涉及到的用户界面组件的所有状态信息。3.2 ServiceService通常位于后台运行,它一般不需要与用户交互,因此Service组件没有图形用户界面。Service组件需要继承Service基类。一个Service组件被运行起来之后,它将拥有自己独立的生命周期,Service组件通常用于为其他组件提供后台服务或监控其他组件的运行状态。service可以在和多场合的应用中使用,比如播放多媒体的时候用户启动了其他Activity这个时候程序要在后台继续播放,比如检测SD卡上文件的变化,再或者在后台记录你地理信息位置的改变等等,总之服务嘛,总是藏在后头的。Service是在一段不定的时间运行在后台,不和用户交互应用组件。每个Service必须在manifest中 通过来声明。可以通过contect.startservice和contect.bindserverice来启动。Service和其他的应用组件一样,运行在进程的主线程中。这就是说如果service需要很多耗时或者阻塞的操作,需要在其子线程中实现。service的两种模式(startService()/bindService()不是完全分离的):本地服务 Local Service 用于应用程序内部。它可以启动并运行,直至有人停止了它或它自己停止。在这种方式下,它以调用Context.startService()启动,而以调用Context.stopService()结束。它可以调用Service.stopSelf() 或 Service.stopSelfResult()来自己停止。不论调用了多少次startService()方法,你只需要调用一次stopService()来停止服务。用于实现应用程序自己的一些耗时任务,比如查询升级信息,并不占用应用程序比如Activity所属线程,而是单开线程后台执行,这样用户体验比较好。远程服务 Remote Service 用于android系统内部的应用程序之间。它可以通过自己定义并暴露出来的接口进行程序操作。客户端建立一个到服务对象的连接,并通过那个连接来调用服务。连接以调用Context.bindService()方法建立,以调用 Context.unbindService()关闭。多个客户端可以绑定至同一个服务。如果服务此时还没有加载,bindService()会先加载它。可被其他应用程序复用,比如天气预报服务,其他应用程序不需要再写这样的服务,调用已有的即可。生命周期使用context.startService() 启动Service是会会经历:context.startService() -&onCreate()- &onStart()-&Service runningcontext.stopService() | -&onDestroy() -&Service stop如果Service还没有运行,则android先调用onCreate()然后调用onStart();如果Service已经运行,则只调用onStart(),所以一个Service的onStart方法可能会重复调用多次。stopService的时候直接onDestroy,如果是调用者自己直接退出而没有调用stopService的话,Service会一直在后台运行。该Service的调用者再启动起来后可以通过stopService关闭Service。所以调用startService的生命周期为:onCreate --& onStart(可多次调用) --& onDestroy使用使用context.bindService()启动Service会经历:context.bindService()-&onCreate()-&onBind()-&Service runningonUnbind() -& onDestroy() -&Service stoponBind将返回给客户端一个IBind接口实例,IBind允许客户端回调服务的方法,比如得到Service运行的状态或其他操作。这个时候把调用者(Context,例如Activity)会和Service绑定在一起,Context退出了,Srevice就会调用onUnbind-&onDestroy相应退出。所以调用bindService的生命周期为:onCreate --& onBind(只一次,不可多次绑定) --& onUnbind --& onDestory。在Service每一次的开启关闭过程中,只有onStart可被多次调用(通过多次startService调用),其他onCreate,onBind,onUnbind,onDestory在一个生命周期中只能被调用一次。而启动service,根据onStartCommand的返回值不同,有两个附加的模式:1. START_STICKY 用于显示启动和停止service。2. START_NOT_STICKY或START_REDELIVER_INTENT用于有命令需要处理时才运行的模式。服务不能自己运行,需要通过调用Context.startService()或Context.bindService()方法启动服务。这两个方法都可以启动Service,但是它们的使用场合有所不同。1. 使用startService()方法启用服务,调用者与服务之间没有关连,即使调用者退出了,服务仍然运行。如果打算采用Context.startService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onStart()方法。如果调用startService()方法前服务已经被创建,多次调用startService()方法并不会导致多次创建服务,但会导致多次调用onStart()方法。采用startService()方法启动的服务,只能调用Context.stopService()方法结束服务,服务结束时会调用onDestroy()方法。2. 使用bindService()方法启用服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止,大有“不求同时生,必须同时死”的特点。onBind()只有采用Context.bindService()方法启动服务时才会回调该方法。该方法在调用者与服务绑定时被调用,当调用者与服务已经绑定,多次调用Context.bindService()方法并不会导致该方法被多次调用。采用Context.bindService()方法启动服务时只能调用onUnbind()方法解除调用者与服务解除,服务结束时会调用onDestroy()方法。3.3Broadcast ReceiverBroadcastReceiver 用于异步接收广播Intent。主要有两大类,用于接收广播的:·正常广播 Normal broadcasts(用 Context.sendBroadcast()发送)是完全异步的。它们都运行在一个未定义的顺序,通常是在同一时间。这样会更有效,但意味着receiver不能包含所要使用的结果或中止的API。·有序广播 Ordered broadcasts(用 Context.sendOrderedBroadcast()发送)每次被发送到一个receiver。所谓有序,就是每个receiver执行后可以传播到下一个receiver,也可以完全中止传播--不传播给其他receiver。 而receiver运行的顺序可以通过matched intent-filter 里面的android:priority来控制,当priority优先级相同的时候,Receiver以任意的顺序运行。要注意的是,即使是Normal broadcasts,系统在某些情况下可能会恢复到一次传播给一个receiver。 特别是receiver可能需要创建一个进程,为了避免系统超载,只能一次运行一个receiver。Broadcast Receiver 并没有提供可视化的界面来显示广播信息。可以使用Notification和Notification Manager来实现可视化的信息的界面,显示广播信息的内容,图标及震动信息。生命周期一个BroadcastReceiver 对象只有在被调用onReceive(Context, Intent)的才有效的,当从该函数返回后,该对象就无效的了,结束生命周期。因此从这个特征可以看出,在所调用的onReceive(Context, Intent)函数里,不能有过于耗时的操作,不能使用线程来执行。对于耗时的操作,请start service来完成。因为当得到其他异步操作所返回的结果时,BroadcastReceiver 可能已经无效了。3.3Content ProviderContentProvider(内容提供者)是Android中的四大组件之一。主要用于对外共享数据,也就是通过ContentProvider把应用中的数据共享给其他应用访问,其他应用可以通过ContentProvider对指定应用中的数据进行操作。ContentProvider分为系统的和自定义的,系统的也就是例如联系人,图片等数据。android中对数据操作包含有:file, sqlite3, Preferences, ContectResolver与ContentProvider前三种数据操作方式都只是针对本应用内数据,程序不能通过这三种方法去操作别的应用内的数据。android中提供ContectResolver与ContentProvider来操作别的应用程序的数据。使用方式:一个应用实现ContentProvider来提供内容给别的应用来操作,一个应用通过ContentResolver来操作别的应用数据,当然在自己的应用中也可以。以下这段是Google Doc中对ContentProvider的大致概述:内容提供者将一些特定的应用程序数据供给其它应用程序使用。内容提供者继承于ContentProvider 基类,为其它应用程序取用和存储它管理的数据实现了一套标准方法。然而,应用程序并不直接调用这些方法,而是使用一个 ContentResolver 对象,调用它的方法作为替代。ContentResolver可以与任意内容提供者进行会话,与其合作来对所有相关交互通讯进行管理。1.ContentProviderAndroid提供了一些主要数据类型的ContentProvider,比如音频、视频、图片和私人通讯录等。可在android.provider包下面找到一些Android提供的ContentProvider。通过获得这些ContentProvider可以查询它们包含的数据,当然前提是已获得适当的读取权限。ContentProvider对于Android应用而言,组件必须相互独立,如果这些Android应用之间需要实现实时的数据交换。例如我们开发里一个发送短信的程序,当发送短信时需要从联系人管理应用中读取指定联系人的数据----这就需要多个应用程序之间进行实时的数据交换。Android系统为这种跨应用的数据交换提供里一个标准,ContentProvider。当用户实现自己的ContentProvider时,需要实现如下抽象方法。Insert(Uri, ContentValues):向ContentProvider插入数据。Deleter(Uri,ContentValues):删除ContentProvdier中指定数据。Update(Uri, ContentValues, String, String[] ):更新ContentProvider中指定数据。Query(Uri, String[], String, String[], String):从ContentProvider查询数据。通常与ContentProvider结合使用的是ContentResolver,一个应用程序使用ContentProvider暴露自己的数据,而另一个应用程序则通过ContentResoler来访问数据。Intent和IntentFilter
严格的说,Intent并不是Android的组件,但它对于Android应用的作用非常大----它是Android应用内不同组件之间通信的载体。当Android运行时需要连接不同的组件时,通常就需要借助于Intent来实现。Intent可以启动应用中另一个Activity,Service,BroadcastReceiver。四
okhttp4.1 Volley功能:JSON,图像等的异步下载;网络请求的排序(scheduling),网络请求的优先级处理
,缓存,多级别取消请求和Activity和生命周期的联动(Activity结束时同时取消所有网络请求)
2013年Google I/O大会上推出了一个新的网络通信框架——Volley。Volley可是说是把AsyncHttpClient和Universal-Image-Loader的优点集于了一身,既可以像AsyncHttpClient一样非常简单地进行HTTP通信,也可以像Universal-Image-Loader一样轻松加载网络上的图片。除了简单易用之外,Volley在性能方面也进行了大幅度的调整,它的设计目标就是非常适合去进行数据量不大,但通信频繁的网络操作,而对于量的网络操作,比如说下载文件等,Volley的表现就会非常糟糕。4.2
RequestQueue mQueue = Volley.newRequestQueue(context);
RequestQueue是一个请求队列对象,它可以缓存所有的HTTP请求,然后按照一定的并发地发出这些请求。RequestQueue内部的设计就是非常合适高并发的,因此我们不必为每一次HTTP请求都创建一个RequestQueue对象,这是非常浪费资源的,基本上在每一个需要和网络交互的Activity中创建一个RequestQueue对象就足够了。4.2 okhttp功能:一般的get请求,一般的post请求,基于Http的文件,上传文件,下载加载图片,支持请求回调,直接返回对象、对象集合,支持session的保持4.3 特点:OkHttp是一个高效的HTTP库:§支持
SPDY(引用层协议) ,共享同一个Socket来处理同一个服务器的所有请求§如果SPDY不可用,则通过连接池来减少请求延时§无缝的支持GZIP来减少数据流量§缓存响应数据来减少重复的网络请求会从很多常用的连接问题中自动恢复。如果您的服务器配置了多个IP地址,当第一个IP连接失败的时候,OkHttp会自动尝试下一个IP。OkHttp还处理了代理服务器问题和SSL握手失败问题。使用 OkHttp 无需重写您程序中的网络代码。OkHttp实现了几乎和java.net.HttpURLConnection一样的API。如果您用了 ApacheHttpClient,则OkHttp也提供了一个对应的okhttp-apache 模块。使用:创建请求对象,请给请求设置参数:使用了Request类的内部Builder类。非常类似于我们以前学校的对话框、通知等的创建手法。需要至少设置一个url参数。Request request = new Request.Builder().url("http://www.qq.com").build();2、创建OkHttp客户端对象:OkHttpClient client = new OkHttpClient();3、调用OkHttpClient对象的newCall方法,获取Call对象。Call call = client.newCall(request);如果需要同步执行网络请求执行4、5、6:如果需要异步执行网络执行4a:(Android推荐)-------------------------------------------------------------------------------------------------4、调用call对象的execute方法,发出网络请求,获取Response对象。Response response = call.execute(); //改方法会阻塞线程5、调用response的body方法方法获取相应体。ResponseBody body = response.body();6、调用ResponseBody的相应方法获取具体响应内容。body.bytes();
//返回字节数组body.byteStream();
//返回字节输入流。------------------------------------------------------------------------------------------------4a、调用call的enqueue(CallBack)方法,把请求法如请求队列。call.enqueue(new
Callback() {//响应失败后的回调@Overridepublic void onFailure(Request request,
IOException e) {}//响应成功后的回调//注意这个方法的回调是在子线程中,所以如果要修改UI也必须使用其他手//段。@Overridepublic void onResponse(Response response)
throws IOException {}
一名风一样的程序媛
行走在风中的女子
[喜欢分享] [喜欢记录 ]
[关注自我成长
旅行 和美食]
我是琉璃,写作小白,
小小人儿,大大梦想,
用简简单单文字记录所经历的事情,
能与大家一起共勉,一起成长。
微信公众号:LLSH琉璃子
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金相信有很多朋友...
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金 相信有很多...
Android面试题收集 Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。这里会不断收集和更新Android基础相关的面试题,目前已收集100题。1.Android系统的架...
近来由于公司运作上出现的问题,导致离职的人员大大增加,同时也大大增加了自己工作量。渐渐萌生出离职的念头。(虽然公司就剩一个Android老板肯定不会放人) 好了!废话不多说。不管怎么样,不忘初心,多学习多整理。万变不离其宗,基础永远是最重要的。今天开始参考其他资料的同时结合...
1、 Android的四大组件是哪些,它们的作用?答:Activity:Activity是Android程序与用户交互的窗口,是Android构造块中最基本的一种,它需要为保持各界面的状态,做很多持久化的事情,妥善管理生命周期以及一些跳转逻辑service:后台服务于Act...
在遇见你之前 我从没有想过 我会如这般迷恋于你 你的眼神、你的微笑、你的表情、你的每一个动作 都深深的吸引我 因你高兴而高兴,看你疲惫而心疼 也许最开始,我喜欢的是你光鲜华丽的外表 时间久了,也许会让人觉得我只是嘴上说说而已 现在的我 不再是那个疯狂的高喊,追捧你的光亮 我...
《在老家》
——作者:陆陈蔚 蓑衣两件 挂在壁上 旧时代的风雨 看起来比我父我母年轻 完好 现在我父亲母亲穿塑料雨衣下田干活 有人来买蓑衣 我父亲说那是不卖的 包括堂前的这个长条桌 那更早 是明朝的 桌子还在用 摆放了粘蝇纸、李字蚊香、俞天翼的作业本 我母亲吃的各...
路遥知马力
和君有真情
大课最难忘
同行更重要 和君路 在和君不是谁领导了谁,谁塑造了谁,而是彼此吸引,正好遇见。我们都曾迷失方向,迷失自我,找不到前进光明的大道,但冥冥之中的指引,让我...
标题:The Drug原作:suits作者:猫酒饼(阿玖)分级:限制级(R)警告:详细的暴力描写配对:Harvey Specter/Mike Ross(斜线表示攻/受)注释:看过旧文读者可以把这篇当做新文来看,因为做了较大的改动。 Mike设定关键词:病弱;黑客;律师,前期...
曾几何时,我喜欢静静地坐在电脑前,一边上网,一边抽烟静静地想你,思绪像氤氲一般缭绕。夜深了,你总是我沉思中最轻盈的那段曲子,有一朵思念的玫瑰总在我的心里绽放。可在你心里,是否有一个熟悉的名字成为你梦里喃喃的呓语? 曾经几何,我喜欢上了伤感的文字,曾经处处透着诙谐的调侃变成了...

我要回帖

更多关于 android常见面试题 的文章

 

随机推荐