Android面试收集录7 AsyncTask详解】的更多相关文章

1.Android中的线程 在操作系统中,线程是操作系统调度的最小单元,同时线程又是一种受限的系统资源,即线程不可能无限制地产生, 并且 **线程的创建和销毁都会有相应的开销.**当系统中存在大量的线程时, 系统会通过会时间片轮转的方式调度每个线程,因此线程不可能做到绝对的并行. 如果在一个进程中频繁地创建和销毁线程,显然不是高效的做法. 正确的做法是采用线程池,一个线程池中会缓存一定数量的线程, 通过线程池就可以避免因为频繁创建和销毁线程所带来的系统开销. 2.AsyncTask简介 Asyn…
1.什么是Fragment? 你可以简单的理解为,Fragment是显示在Activity中的Activity. 它可以显示在Activity中,然后它也可以显示出一些内容. 因为它拥有自己的生命周期,可以接受处理用户的事件 并且你可以在一个Activity中动态的添加,替换,移除不同的Fragment, 因此对于信息的展示具有很大的便利性. 2.Fragment的生命周期 因为Fragment是依附于Activity存在的,因此它的生命周期受到Activity的生命周期影响. Fragment…
一. 定义 IntentService是Android里面的一个封装类,继承自四大组件之一的Service. 二.作用 处理异步请求,实现多线程 三. 工作流程 注意:若启动IntentService 多次,那么每个耗时操作则以队列的方式在 IntentService的onHandleIntent回调方法中依次执行,执行完自动结束. 四.实现步骤 步骤1:定义IntentService的子类:传入线程名称.复写onHandleIntent()方法 步骤2:在Manifest.xml中注册服务 步…
1.前言 我们知道在Android系统中,我们执行完耗时操作都要另外开启子线程来执行,执行完线程以后线程会自动销毁. 想象一下如果我们在项目中经常要执行耗时操作,如果经常要开启线程,接着又销毁线程, 这无疑是很消耗性能的?那有什么解决方法呢? 使用线程池 使用HandlerThread 本篇文章主要讲解一下问题 HandlerThread的使用场景以及怎样使用HandlerThread? HandlerThread源码分析 2.HandlerThread的使用场景以及怎样使用HandlerThr…
1.ContentProvider简单介绍 1.1.定义 ContentProvider,即内容提供者属于Android的四大组件之一. 1.2.作用 进程间进行数据交互&共享,即跨进程通信. 1.3.原理 ContentProvider的底层是采用Android中的Binder机制. 2.ContentProvider具体使用 2.0.关于ContentProvider的使用主要介绍一下内容: 2.1.统一资源标识符(URI) 定义:Uniform Resource Identifier,即统…
1.Activity的生命周期 1.1.首先查看一下Activity生命周期经典图片. 在正常情况下,一个Activity从启动到结束会以如下顺序经历整个生命周期: onCreate()->onStart()->onResume()->onPause()->onStop()->onDestory(). 包含了六个部分,还有一个onRestart()没有调用,下面我们一一介绍这七部分内容. (1) onCreate():当 Activity 第一次创建时会被调用.这是生命周期的…
Activity mActivity =new Activity() 作为Android开发者,不知道你有没有思考过这个问题,Activity可以new吗?Android的应用程序开发采用JAVA语言,Activity本质上也是一个对象,那上面的写法有什么问题呢?估计很多人说不清道不明.Android程序不像Java程序一样,随便创建一个类,写个main()方法就能运行,Android应用模型是基于组件的应用设计模式,组件的运行要有一个完整的Android工程环境,在这个环境下,Activity…
1.Broadcast Receiver广播接收器简单介绍 1.1.定义 Broadcast Receiver(广播接收器),属于Android四大组件之一 在Android开发中,Broadcast Receiver的应用场景非常多.广播,是一个全局的监听器,属于Android四大组件. Android 广播分为两个角色:广播发送者,广播接收者. 1.2.作用 用于监听/接收 应用发出的广播消息,并做出响应. 应用场景 a.不同组件之间通信(包括应用内/不同应用之间) b.与Android系统…
转自:秋招面试宝典. 一. 基础认知 1.1 事件分发的对象是谁? 答:事件 当用户触摸屏幕时(View或ViewGroup派生的控件),将产生点击事件(Touch事件). Touch事件相关细节(发生触摸的位置.时间.历史记录.手势动作等)被封装成MotionEvent对象 主要发生的Touch事件有如下四种: MotionEvent.ACTION_DOWN:按下View(所有事件的开始) MotionEvent.ACTION_MOVE:滑动View MotionEvent.ACTION_CA…
1.Android应用程序的资源是如何存储的,如何使用? res文件夹或者assets文件夹 res目录中的资源在R类中生成一个int变量,然后再布局文件中可以直接使用,在代码中,要getResources().getString(R.string...) assets目录中的文件必须使用文件名方式,getResources().getAssets().open("test.png") 2.res和assets目录的区别? res目录中的子目录名字有限制,而assets目录没有要求 访…
1.如何在Android应用程序的窗口上绘制图形? 继承View 实现View中的onDraw()方法 2.如何绘制圆,空心椭圆? canvas.drawArc或canvas.drawCircle方法 绘制圆 canvas.drawArc(矩形对象,0,360,true,paint); 3.绘制位图的两种方法? 法1:canvas.drawBitmap(bitmap,10,10,null);  //在画布上画图 法2:drawable.draw(canvas);  //把图粘贴到画布上 4.如何…
1.请写出调用系统拨号界面? Intent intent=new Intent(Intent.ACTION_DIAL,Uri.pase("tel:12345678910")); startActivity(intent); 添加权限:<uses-permission android:name="android.permission.CALL_PHONE"> 2.在Android系统中监听来电有几种方式? 法1:广播接收器 法2:TelephoneMana…
1.创建Socket对象需要至少指定哪些信息? IP(或域名)和端口号 Socket socket=new Socket("www.baidu.com",80); 2.如何使用Socket连接服务器? 建立一个Socket对象:Socket socket=new Socket("192.168.17.100",8080); OutputStream os=socket.getOutputStream(); OutputStreamWriter osw=new Out…
1.SQLite数据库如何查询表table1的第20条到30条记录? select * from table1 limit 19,11   ==>从19开始,11个数据 2.如何才能将table1表的表结构和数据复制到表table2上? create table table2 as select * from table1; 3.如何获取最近一次执行SQL语句所影响的记录行数? insert into table1 values(1,'bill'); select changes(); ==>…
1.请描述Android SDK支持哪些文件存储技术? 使用SharePreferences保存key-value类型的数据 流文件存储(openFileOutput+openFileInput或FileInputStream+FileOutputStream) XML半结构化存储 Json保存数组核对象 数据库保存结构化数据 2.如何使用SharePreference? 获取对象:Context.getSharedPreferences获取,如getSharedPreferences("名字&…
1.请说出Android SDK支持哪些方式显示富文本信息? 使用TextView组件可以显示富文本信息,如果要实现图文混排,需实现ImageGetter接口 使用WebView组件显示HTML页面 自定义View,覆盖onDraw方法,可以直接绘制富文本 TextView组件显示图像还可以使用ImageSpan对象 2.TextView组件如何显示图像? 使用<img>标签在TextView组件中显示图像,需要CharSequence配合 使用ImageSpan对象在TextView组件中显…
1.请说出Android中的五种布局,并介绍作用? FrameLayout(堆栈布局),层叠方式显示,类似于PhotoShop上的层叠图层. LinearLayout(线性布局),将视图以水平或者垂直方式显示. RelativeLayout(相对布局),通过确定两个视图的相对位置进行布局. TableLayout(表格布局),将视图以表格的形式排列. AbsoluteLayout(绝对布局),设置View的绝对坐标. GridLayout(网格布局),和TableLayout布局相似. 2.xm…
1.Android的特点有哪些? 编程语言是Java或Kotlin,Android中的Java字节码是允许在Dalvik虚拟机上的 支持4大组件 Android内置了WebKit核心的浏览器,支持H5 2D和3D绘图丰富 支持轻量级的SQLite数据库 支持众多的硬件传感器 开源 集成Android Studio开发环境 2.MVC模式的原理? M==>Model V==>View C==>Controller 基本原理就是通过Controller连接View和Model 优点:显示部分…
在安卓系统中:当系统内存不足时,Android系统将根据进程的优先级选择杀死一些不太重要的进程,优先级低的先杀死.进程优先级从高到低如下. 前台进程 处于正在与用户交互的activity 与前台activity绑定的service 调用了startForeground()方法的service 正在执行oncreate(),onstart(),ondestroy方法的 service. 进程中包含正在执行onReceive()方法的BroadcastReceiver. 系统中的前台进程并不会很多,…
一.Android 动画分类 总的来说,Android动画可以分为两类,最初的传统动画和Android3.0 之后出现的属性动画: 传统动画又包括 帧动画(Frame Animation)和补间动画(Tweened Animation). 二.传统动画 帧动画 帧动画是最容易实现的一种动画,这种动画更多的依赖于完善的UI资源,他的原理就是将一张张单独的图片连贯的进行播放,从而在视觉上产生一种动画的效果:有点类似于某些软件制作gif动画的方式. 如上图中的京东加载动画,代码要做的事情就是把一幅幅的…
一.为什么Bitmap需要高效加载? 现在的高清大图,动辄就要好几M,而Android对单个应用所施加的内存限制,只有小几十M,如16M,这导致加载Bitmap的时候很容易出现内存溢出.如下异常信息,便是在开发中经常需要的: java.lang.OutofMemoryError:bitmap size exceeds VM budget 为了解决这个问题,就出现了Bitmap的高效加载策略.其实核心思想很简单.假设通过ImageView来显示图片,很多时候ImageView并没有原始图片的尺寸那…
一.使用 Intent Activity,Service,Receiver 都支持在 Intent 中传递 Bundle 数据,而 Bundle 实现了 Parcelable 接口,可以在不同的进程间进行传输. 在一个进程中启动了另一个进程的 Activity,Service 和 Receiver ,可以在 Bundle 中附加要传递的数据通过 Intent 发送出去. 二.使用文件共享 Windows 上,一个文件如果被加了排斥锁会导致其他线程无法对其进行访问,包括读和写:而 Android…
一.什么是Dalvik虚拟机 Dalvik是Google公司自己设计用于Android平台的Java虚拟机,它是Android平台的重要组成部分,支持dex格式(Dalvik Executable)的Java应用程序的运行.dex格式是专门为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统.Google对其进行了特定的优化,使得Dalvik具有高效.简洁.节省资源的特点.从Android系统架构图知,Dalvik虚拟机运行在Android的运行时库层. Dalvik作为面向Linu…
一.View绘制的流程框架 View的绘制是从上往下一层层迭代下来的.DecorView-->ViewGroup(--->ViewGroup)-->View ,按照这个流程从上往下,依次measure(测量),layout(布局),draw(绘制). 二.Measure流程 顾名思义,就是测量每个控件的大小. 调用measure()方法,进行一些逻辑处理,然后调用onMeasure()方法,在其中调用setMeasuredDimension()设定View的宽高信息,完成View的测量操…
一.职能简介 Activity Activity并不负责视图控制,它只是控制生命周期和处理事件.真正控制视图的是Window.一个Activity包含了一个Window,Window才是真正代表一个窗口.Activity就像一个控制器,统筹视图的添加与显示,以及通过其他回调方法,来与Window.以及View进行交互. Window Window是视图的承载器,内部持有一个 DecorView,而这个DecorView才是 view 的根布局.Window是一个抽象类,实际在Activity中持…
一.Android中的缓存策略 一般来说,缓存策略主要包含缓存的添加.获取和删除这三类操作.如何添加和获取缓存这个比较好理解,那么为什么还要删除缓存呢?这是因为不管是内存缓存还是硬盘缓存,它们的缓存大小都是有限的.当缓存满了之后,再想其添加缓存,这个时候就需要删除一些旧的缓存并添加新的缓存. 因此LRU(Least Recently Used)缓存算法便应运而生,LRU是近期最少使用的算法,它的核心思想是当缓存满时,会优先淘汰那些近期最少使用的缓存对象.采用LRU算法的缓存有两种:LrhCach…
1.消息机制概述 1.1.消息机制的简介 在Android中使用消息机制,我们首先想到的就是Handler. 没错,Handler是Android消息机制的上层接口. Handler的使用过程很简单,通过它可以轻松地将一个任务切换到Handler所在的线程中去执行. 通常情况下,Handler的使用场景就是更新UI. 如下就是使用消息机制的一个简单实例: public class Activity extends android.app.Activity { private Handler mH…
1.如何用OpenGL ES绘制一个三角形? 编写一个类实现Renderer接口,实现onDrawFrame方法,onSurfaceChanged方法,onSurfaceCreated方法 编写一个类Triangle类,定义定点坐标,装载所有顶点坐标,调用GL10的一个glDrawArrays方法来绘制三角形 最后在重写的onDrawFrame方法中调用triangle.drawSelf来真正绘制三角形 2.OpenGL ES绘制一个矩形有哪些方法? 三角形旋转法(但是要求一个角为90度) 顶点…
1.打开手机中的蓝牙功能有哪些方法? 法1:使用Intent  ==>new Intent(BluetoothAdaper.ACTION_REQUEST_ENABLE); startActivityForResult(intent,1); 法2:使用BluetoothAdapter ==>BluetoothAdapter.getDefaultAdapter().enable(); 方法1会弹出一个对话框,方法2直接打开,但是需要在清单中配置权限. 2.搜索蓝牙的过程会经过哪些状态? 搜索到蓝牙…
1.如何使用AlertDialog显示一个列表? 使用AlertDialog.Builder.setItems方法. 在setItems中定义DialogInterface.OnClickListener监听器 2.如何使用AlertDialog实现单选按钮? 定义一个字符串数组,用来填充选项 new一个AlertDialog.Builder对象 setSingleChoiceItems(数组,-1,new OnClickListener{}) 3.如何使用AlertDialog实现多选? 定义…