精华内容
下载资源
问答
  • 作者:知乎用户链接:https://www.zhihu.com/question/29550687/answer/44807311来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。...首先说下移动端的布局:*【rem布局】:rem是指h...

    作者:知乎用户
    链接:https://www.zhihu.com/question/29550687/answer/44807311
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    对于【整个页面】的布局,现在由于table布局基本已经销声匿迹(html邮件还在用),所以“HTML+CSS布局”几乎是所有布局的统称。首先说下移动端的布局:*【rem布局】:rem是指html元素上的字体大小对应的像素数值,使用rem为长度单位。理想情况下如果将所有的长度单位都用rem标示,那么我只需要更改html上的font-size即可同步按比例更改所有长度单位(包括元素宽高、边距、字体大小等)。这在手机屏幕大小不定时就特别有用,只需要计算一下手机屏幕宽度,设置合适的html上的font-size,就能自适应。这里有一个开源代码能让你轻松完成rem布局和了解更多信息:jieyou/rem_layout · GitHub*【弹性盒模型布局】:在rem开始风靡以前,为了解决手机屏幕宽度不定的问题,更多的采用的是弹性盒模型,一句话介绍就是同级子元素按比例占据横向剩余区域(纵向弹性盒这里暂不展开)。扩展阅读:使用 CSS 弹性盒,如果你不了解弹性盒,可以在不掌握任何知识的情况下用这个插件来实现:jieyou/flexibleWapHelper · GitHub*【百分比布局】:移动端前端开发的蛮荒阶段,我们采用的是远古时代的百分比布局,简单粗暴:横向充满则100%;两栏则各50%;三栏则各33.3%,不过这种方式很快被弹性盒模型布局取代。上述移动端布局中,通常都会互相结合使用,并且在设定长度单位时,一部分元素还是会根据情况使用绝对的像素值单位(比如设置1px宽的border)(css像素和物理像素这里暂不展开)。然后说PC端的,由于各个CSS框架的推进,基本上都是以12列(或12的倍数)网格布局为主了,然后网格布局又分为【流式网格】和【固定宽度网格】(如总宽度设为960px)。前者通常用百分比来实现,并且已经计算和减去了所谓的“槽”的宽度;后者通常是设置了具体的像素定值。在更早的时候,则是常用的一栏、两栏、三栏布局,内部通常都用浮动来实现。楼主所说的“比如1. 固定侧边栏布局2. 清除浮动3. 垂直居中”都是某些布局的细节,我认为还不能成为“模式”、“经典案例”,应该是一个前端开发人员必备的最原子的技能,基本上如果纯手工切几个稍微复杂的页面都会遇到,一次基本就记住和掌握了。

     

    出自:https://www.zhihu.com/question/29550687

    转载于:https://www.cnblogs.com/golddemon/p/7403476.html

    展开全文
  • 2、android五个布局分别有哪些?每个用法 3、ListView优化问题? 4、如何避免内存溢出问题 5、什么是ANR,什么情况下会出现此现象?该如何处理 6、说一说异常机制 7、String和StringBuilder区别 8、说...
    1、请说一下android的四大组件
    2、android的五个布局分别有哪些?每个的用法
    3、ListView的优化问题?
    4、如何避免内存溢出问题
    5、什么是ANR,什么情况下会出现此现象?该如何处理
    6、说一说异常机制
    7、String和StringBuilder的区别
    8、说一下你是怎么理解List、Set、Map的?它们各有什么用法
    9、android常用的一些设计模式,请举例说明?
    10、说一下Activity的生命周期和Service的生命周期
    11、如何关闭广播?
    12、ContentProvider是以什么形式存储数据的?存储在那里了
    13、说一说你对反射机制的理解
    14、Activity横竖屏时的生命周期,怎么设置属性
    以上这些是小弟在面试时经常遇到的一些问题拿出来和大家一起分享下 ,不全之处请大家补充,谢谢!!
    展开全文
  • Android面试题整理

    千次阅读 2016-11-20 11:33:13
    Android面试题整理 Android面试题整理 Android的四大组件是哪些 请介绍下Android中常用的四种布局 android中的动画有哪几类它们的特点和区别是...activity的启动模式有哪些是什么含义 activity在屏幕旋转时的生命周期

    以后更新的面试题会放在顶部

    静态内部类、内部类、匿名内部类,为什么内部类会持有外部类的引用?持有的引用是this?还是其它?

    静态内部类:使用static修饰的内部类
    匿名内部类:使用new生成的内部类
    因为内部类的产生依赖于外部类,持有的引用是类名.this。

    事件分发机制

    对于一个根ViewGroup来说,发生点击事件首先调用dispatchTouchEvent
    如果这个ViewGroup的onIterceptTouchEvent返回true就表示它要拦截当前事件,接着这个ViewGroup的onTouchEvent就会被调用.如果onIterceptTouchEvent返回false,那么就会继续向下调用子View的dispatchTouchEvent方法
    当一个View需要处理事件的时候,如果它没有设置onTouchListener,那么直接调用onTouchEvent.如果设置了Listenter 那么就要看Listener的onTouch方法返回值.为true就不调,为false就调onTouchEvent
    View的默认实现会在onTouchEvent里面把touch事件解析成Click之类的事件
    点击事件传递顺序 Activity -> Window -> View
    一旦一个元素拦截了某事件,那么一个事件序列里面后续的Move,Down事件都会交给它处理.并且它的onInterceptTouchEvent不会再调用
    View的onTouchEvent默认都会消耗事件,除非它的clickable和longClickable都是false(不可点击),但是enable属性不会影响

    View本身是没有onInterceptTouchEvent()方法的, 这个方法在ViewGroup中

    计算机网络的ISO模型分层

    ISO分层

    什么是Socket ?

    我们知道两个进程如果需要进行通讯最基本的一个前提能能够唯一的标示一个进程,在本地进程通讯中我们可以使用PID来唯一标示一个进程,但PID只在本地唯一,网络中的两个进程PID冲突几率很大,这时候我们需要另辟它径了,我们知道IP层的ip地址可以唯一标示主机,而TCP层协议和端口号可以唯一标示主机的一个进程,这样我们可以利用ip地址+协议+端口号唯一标示网络中的一个进程。

    能够唯一标示网络中的进程后,它们就可以利用socket进行通信了,什么是socket呢?我们经常把socket翻译为套接字,socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。

    socket起源于UNIX,在Unix一切皆文件哲学的思想下,socket是一种”打开—读/写—关闭”模式的实现,服务器和客户端各自维护一个”文件”,在建立连接打开后,可以向自己文件写入内容供对方读取或者读取对方内容,通讯结束时关闭文件。

    TCP协议的三次握手

    三次握手1

    第一次握手:客户端尝试连接服务器,向服务器发送syn包(同步序列编号Synchronize Sequence Numbers),syn=j,客户端进入SYN_SEND状态等待服务器确认

    第二次握手:服务器接收客户端syn包并确认(ack=j+1),同时向客户端发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态

    第三次握手:第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手

    定睛一看,服务器socket与客户端socket建立连接的部分其实就是大名鼎鼎的三次握手

    三次握手2

    Android的四大组件是哪些 ?

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

    service:后台服务于Activity,封装有一个完整的功能逻辑实现. Service可以在很多场合的应用中使用,比如播放多媒体的时候用户启动了其他Activity这个时候程序要在后台继续播放,比如检测SD卡上文件的变化,再或者在后台记录你地理信息位置的改变等等,总之服务总是藏在后台的。

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

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

    请介绍下Android中常用的四种布局

    1. FrameLayout 所有东西依次都放在左上角,会重叠,这个布局比较简单,也只能放一点比较简单的东西。
    2. LinerLayout 线性布局,每一个LinearLayout里面又可分为垂直布局(android:orientation=”vertical”)和水平布局(android:orientation=”horizontal” )。当垂直布局时,每一行就只有一个元素,多个元素依次垂直往下;水平布局时,只有一行,每一个元素依次向右排列。
    3. RelativeLayout 相对布局可以理解为某一个元素为参照物,来定位的布局方式。
    4. TableLayout 表格布局.

    android中的动画有哪几类,它们的特点和区别是什么

    三种, Tween(补间动画), Frame(帧动画)和属性动画.

    Tween动画,这种实现方式可以使视图组件移动、放大、缩小以及产生透明度的变化;

    Frame动画,传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。

    属性动画, 通过改变某个控件的属性值来实现动画效果

    android中有哪几种解析xml的类?官方推荐哪种?以及它们的原理和区别

    XML解析主要有三种方式,SAX、DOM、PULL。

    常规在PC上开发我们使用Dom相对轻松些,但一些性能敏感的数据库或手机上还是主要采用SAX方式,SAX读取是单向的,优点:不占内存空间、解析属性方便,但缺点就是对于套嵌多个分支来说处理不是很方便。
    而DOM方式会把整个XML文件加载到内存中去,但是提醒大家该方法在查找方面可以和XPath很好的结合如果数据量不是很大推荐使用。
    而PULL常常用在J2ME对于节点处理比较好,类似SAX方式,同样很节省内存,在J2ME中我们经常使用的KXML库来解析。

    ListView的优化方案

    1. 复用convertView

    2. 给contentView设置tag(setTag()),传入一个viewHolder对象,用于缓存要显示的数据,可以达到图像数据异步加载的效果。

    3. 设置ListView的高度为 确定值或match_parent

    4. 如果listview需要显示的item很多,就要考虑分页加载。

    请介绍下Android的数据存储方式。

    使用SharedPreferences存储数据;文件存储数据;SQLite数据库存储数据;使用ContentProvider存储数据;网络存储数据;

    activity的启动模式有哪些?是什么含义?

    在android里,有4种activity的启动模式,分别为:

    “standard” (默认): Activity无限压栈, 不做任何处理

    “singleTop” : 如果启动activity时发现它当前已经在栈顶则不会重新创建一个实例, 如果你启动的那个activity不再栈顶的话就会重新创建一个activity实例。

    “singleTask” : 当你的activity设置为SingleTask时,每次启动你的activity的时候 就会去栈里面是否存在这个activity的实例,如果存在则直接使用这个实例,并把这个activity之上的所有其他的activity统统出栈,如果栈里面没有这个activity的实例的话就创建一个该activity的实例。

    “singleInstance” : 是其所在栈的唯一activity,它会每次都被重用。

    activity在屏幕旋转时的生命周期

    不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次;设置Activity的android:configChanges=”orientation”时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次;设置Activity的android:configChanges=”orientation|keyboardHidden”时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法

    如何启用Service,如何停用Service

    服务的开发比较简单,如下:

    第一步:继承Service类

    public classSMSService extends Service {}

    第二步:在AndroidManifest.xml文件中的节点里对服务进行配置:

    <serviceandroid:name=".SMSService" />

    服务不能自己运行,需要通过调用Context.startService()或Context.bindService()方法启动服务。这两个方法都可以启动Service,但是它们的使用场合有所不同。使用startService()方法启用服务,调用者与服务之间没有关连,即使调用者退出了,服务仍然运行。使用bindService()方法启用服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止,大有“不求同时生,必须同时死”的特点。

    如果打算采用Context.startService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onStart()方法。如果调用startService()方法前服务已经被创建,多次调用startService()方法并不会导致多次创建服务,但会导致多次调用onStart()方法。采用startService()方法启动的服务,只能调用Context.stopService()方法结束服务,服务结束时会调用onDestroy()方法。

    如果打算采用Context.bindService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onBind()方法。这个时候调用者和服务绑定在一起,调用者退出了,系统就会先调用服务的onUnbind()方法,接着调用onDestroy()方法。如果调用bindService()方法前服务已经被绑定,多次调用bindService()方法并不会导致多次创建服务及绑定(也就是说onCreate()和onBind()方法并不会被多次调用)。如果调用者希望与正在绑定的服务解除绑定,可以调用unbindService()方法,调用该方法也会导致系统调用服务的onUnbind()–>onDestroy()方法。

    服务常用生命周期回调方法如下:

    onCreate() 该方法在服务被创建时调用,该方法只会被调用一次,无论调用多少次startService()或bindService()方法,服务也只被创建一次。

    onDestroy()该方法在服务被终止时调用。

    与采用Context.startService()方法启动服务有关的生命周期方法

    onStart() 只有采用Context.startService()方法启动服务时才会回调该方法。该方法在服务开始运行时被调用。多次调用startService()方法尽管不会多次创建服务,但onStart() 方法会被多次调用。

    与采用Context.bindService()方法启动服务有关的生命周期方法

    onBind()只有采用Context.bindService()方法启动服务时才会回调该方法。该方法在调用者与服务绑定时被调用,当调用者与服务已经绑定,多次调用Context.bindService()方法并不会导致该方法被多次调用。

    onUnbind()只有采用Context.bindService()方法启动服务时才会回调该方法。该方法在调用者与服务解除绑定时被调用

    注册广播有几种方式,这些方式有何优缺点?请谈谈Android引入广播机制的用意。

    答:首先写一个类要继承BroadcastReceiver

    第一种:在清单文件中声明,添加

     <!--表示该receiver有效, 并且可以在外部访问-->
        <receiver
            android:name=".MyReceiver1"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="com.lulu.action.MY_BROADCAST"/>
    
            </intent-filter>
        </receiver>
    

    第二种使用代码进行注册如:

    
    //完成广播注册
    @Override
    protected void onResume() {
        super.onResume();
        IntentFilter filter = new IntentFilter();
        filter.addAction("com.lulu.action.MY_BROADCAST");
        registerReceiver(receiver2, filter);
    }
    
    //完成解除注册
    @Override
    protected void onPause() {
        super.onPause();
        unregisterReceiver(receiver2);
    }
    

    两种注册类型的区别是:

    1)第一种是常驻型,也就是说当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行。

    2)第二种不是常驻型广播,也就是说广播跟随程序的生命周期。

    Looper MessageQueue Message Handler的关系

    Looper内部有loop方法, 里面取的是Looper内部的MessageQueue
    MessageQueue内部有Message
    Handler内部获取当前线程的Looper对象, 找到MessageQueue, Handler向其发送消息

    loop一直在轮询遍历MessageQueue, 找到发来的handler对象并执行dispatchMessage, 处理消息

    mvc模式的原理

    mvc是model,view,controller的缩写,mvc包含三个部分:

      模型(model)对象:是应用程序的主体部分,所有的业务逻辑都应该写在该层。

      视图(view)对象:是应用程序中负责生成用户界面的部分。也是在整个mvc架构中用户唯一可以看到的一层,接收用户的输入,显示处理结果。

      控制器(control)对象:是根据用户的输入,控制用户界面数据显示及更新model对象状态的部分,控制器更重要的一种导航功能,响应用户出发的相关事件,交给m层处理。

      android鼓励弱耦合和组件的重用,在android中mvc的具体体现如下:

      1)视图层(view):一般采用xml文件进行界面的描述,使用的时候可以非常方便的引入,当然,如果你对android了解的比较的多了话,就一定可以想到在android中也可以使用JavaScript+html等的方式作为view层,当然这里需要进行java和javascript之间的通信,幸运的是,android提供了它们之间非常方便的通信实现。

      2)控制层(controller):android的控制层的重任通常落在了众多的acitvity的肩上,这句话也就暗含了不要在acitivity中写代码,要通过activity交割model业务逻辑层处理,这样做的另外一个原因是android中的acitivity的响应时间是5s,如果耗时的操作放在这里,程序就很容易被回收掉。

      3)模型层(model):对数据库的操作、对网络等的操作都应该在model里面处理,当然对业务计算等操作也是必须放在的该层的。

    什么是ANR 如何避免它?

    ANR:Application Not Responding。在 Android 上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应
    用程序无响应(ANR:Application Not Responding)对话框.

    避免方法:Activity应该在它的关键生命周期方法(如onCreate()和onResume())里尽可能少的去做创建操作和潜在的耗时操作,例如网络或数据库操作,或者高耗时的计算如改变位图尺寸,应该在子线程里(或者异步方式)来完成。主线程应该为子线程提供一个Handler,以便完成时能够提交给主线程。

    什么情况会导致Force Close ?如何避免?能否捕获导致其的异常?

    抛出运行时异常时就会导致Force Close,比如空指针、数组越界、类型转换异常等等。

    捕获:可以通过logcat查看抛出异常的代码出现的位置,然后到程序对应代码中进行修改。

    避免:编写程序时,要思维缜密,在可能出现异常的地方都作相应的处理,增强程序的健壮性。

    描述一下android的系统架构

    Android 架构:Linux Kernel(Linux内核)、Hardware Abstraction Layer(硬件抽象层)、Libraries(系统运行库或者是c/c++ 核心库)、Application Framework(开发框架包 )、Applications(核心应用程序)

    原来所说是四层: app、Framework、lib、kernel

    来自牛客网

    请介绍下ContentProvider是如何实现数据共享的。

    一个程序可以通过实现一个Content provider的抽象接口将自己的数据完全暴露出去,而且Contentproviders是以类似数据库中表达方式将数据暴露。Content providers存储和检索数据,通过它可以让所有的应用程序访问到,这也是应用程序之间唯一共享数据的方法。

    要想使应用程序的数据公开化,可通过2种方法:创建一个属于你自己的Content provider或者将你的数据添加到一个已经存在的Content provider中,前提是有相同数据类型并且有写入Contentprovider的权限。

    如何通过一套标准及统一的接口获取其他应用程序暴露的数据?

    Android提供了ContentResolver,外界的程序可以通过ContentResolver接口访问ContentProvider提供的数据。

    Service和Thread的区别

    答:servie是系统的组件,它由系统进程托管(servicemanager);它们之间的通信类似于client和server,是一种轻量级的进程间通讯(IPC (Inter-process communication))通信,这种通信的载体是binder,它是在linux层交换信息的一种ipc。而thread是由本应用程序托管。

    1). Thread:Thread是程序执行的最小单元,它是分配CPU的基本单位。可以用Thread 来执行一些异步的操作。

    2). Service:Service是android的一种机制,当它运行的时候如果是LocalService,那么对应的Service 是运行在主进程的main 线程上的。如:onCreate,onStart这些函数在被系统调用的时候都是在主进程的 main 线程上运行的。如果是Remote Service,那么对应的Service 则是运行在独立进程的main 线程上。

    既然这样,那么我们为什么要用Service 呢?其实这跟android 的系统机制有关,我们先拿Thread 来说。Thread的运行是独立于 Activity 的,也就是说当一个Activity 被 finish 之后,如果你没有主动停止Thread 或者Thread 里的 run方法没有执行完毕的话,Thread 也会一直执行。因此这里会出现一个问题:当Activity 被 finish 之后,你不再持有该Thread 的引用。另一方面,你没有办法在不同的Activity 中对同一Thread 进行控制。

    举个例子:如果你的Thread 需要不停地隔一段时间就要连接服务器做某种同步的话,该Thread 需要在Activity 没有start的时候也在运行。这个时候当你start 一个Activity 就没有办法在该Activity 里面控制之前创建的Thread。因此你便需要创建并启动一个Service ,在Service 里面创建、运行并控制该Thread,这样便解决了该问题(因为任何Activity 都可以控制同一Service,而系统也只会创建一个对应Service 的实例)。

    因此你可以把Service 想象成一种消息服务,而你可以在任何有Context 的地方调用Context.startService、Context.stopService、Context.bindService,Context.unbindService,来控制它,你也可以在Service 里注册BroadcastReceiver,在其他地方通过发送broadcast 来控制它,当然这些都是Thread 做不到的。

    Android本身的api并未声明会抛出异常,则其在运行时有无可能抛出runtime异常,你遇到过吗?诺有的话会导致什么问题?如何解决?

    答:会,比如nullpointerException。我遇到过,比如textview.setText()时,textview没有初始化。会导致程序无法正常运行出现forceclose。打开控制台查看logcat信息找出异常信息并修改程序。

    IntentService有何优点?

    Acitivity的进程当处理Intent的时候,会产生一个对应的Service; Android的进程处理器现在会尽可能的不kill掉你;非常容易使用

    如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态?

    答:重写onSaveInstanceState()方法,在此方法中保存需要保存的数据,该方法将会在activity被回收之前调用。通过重写onRestoreInstanceState()方法可以从中提取保存好的数据

    如何将一个Activity设置成窗口的样式。

    <activity>中配置:android :theme="@android:style/Theme.Dialog" 
    

    AIDL的全称是什么?如何工作?能处理哪些类型的数据?

    全称是:Android Interface Define Language

    AIDL(AndRoid接口描述语言)是一种接口描述语言; 编译器可以通过aidl文件生成一段代码,通过预先定义的接口达到两个进程内部通信进程的目的. 如果需要在一个Activity中, 访问另一个Service中的某个对象, 需要先将对象转化成AIDL可识别的参数(可能是多个参数),然后使用AIDL来传递这些参数, 在消息的接收端, 使用这些参数组装成自己需要的对象.

    AIDL的IPC的机制是基于接口的,但它是轻量级的。它使用代理类在客户端和实现层间传递值. 如果要使用AIDL, 需要完成2件事情:

    1. 引入AIDL的相关类.; 
    2.调用aidl产生的class.
    

    AIDL的创建方法:

    AIDL语法很简单,可以用来声明一个带一个或多个方法的接口,也可以传递参数和返回值。 由于远程调用的需要, 这些参数和返回值并不是任何类型.下面是些AIDL支持的数据类型:

    1. 不需要import声明的简单Java编程语言类型(int,boolean等)

    2. String, CharSequence不需要特殊声明

    3. List, Map和Parcelables类型, 这些类型内所包含的数据成员也只能是简单数据类型, String等其他比支持的类型.

    解释下Android程序运行时权限与文件系统权限的区别。

    运行时权限Dalvik(android授权)

    文件系统 linux 内核授权

    系统上安装了多种浏览器,能否指定某浏览器访问指定页面?请说明原由。

    通过直接发送Uri把参数带过去,或者通过manifest里的intentfilter里的data属性

    android系统的优势和不足

    5大优势

    1. 开放性
    2. 挣脱运营商的束缚
    3. 丰富的硬件选择
    4. 不受限制的开发商
    5. 无缝结合的Google应用

    5大不足

    1. 安全和隐私
    2. 首先开卖Android的不是最大的运营商
    3. 运营商仍然能够影响到Android手机
    4. 同类机型用户减少
    5. 过分依赖开发商 缺少标准配置

    Android dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念

    DVM指Dalvik的虚拟机。每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。而每一个DVM都是在Linux 中的一个进程,所以说可以认为是同一个概念。

    一条最长的短信息约占多少byte?

    文70(包括标点),英文160,160个字节。 

    有一个一维整型数组int[]data保存的是一张宽为width,高为height的图片像素值信息。请写一个算法,将该图片所有的白色不透明(0xffffffff)像素点的透明度调整为50%

    
    final int size = data.length;
    
    for(int i = 0; i< size; i++){
    
         if(data[i] == 0xffffffff)
    
                data[i] = 0x80ffffff;
    
    }

    如何将SQLite数据库(dictionary.db文件)与apk文件一起发布

    解答:可以将dictionary.db文件复制到 Android工程中的res/raw目录中。所有在res/raw目录中的文件不会被压缩,这样可以直接提取该目录中的文件。

    复制的基本方法是使用getResources().openRawResource方法获得res/raw目录中资源的 InputStream对象,然后将该InputStream对象中的数据写入其他的目录中相应文件中。在Android SDK中可以使用SQLiteDatabase.openOrCreateDatabase方法来打开任意目录中的SQLite数据库文件。

    谈谈Android的IPC(进程间通信)机制

    IPC是内部进程通信的简称. Android中的IPC机制是为了让Activity和Service之间可以随时的进行交互,故在Android中该机制,只适用于Activity和Service之间的通信,类似于远程方法调用,类似于C/S模式的访问。通过定义AIDL接口文件来定义IPC接口。Servier端实现IPC接口,Client端调用IPC接口本地代理。

    DDMS和TraceView的区别?

    DDMS是一个程序执行查看器,在里面可以看见线程和堆栈等信息,TraceView是程序性能分析器.

    Picasso和Glide的区别

    1. Picasso加载了全尺寸的图片到内存,然后让GPU来实时重绘大小。而Glide加载的大小和ImageView的大小是一致的,因此更小。当然,Picasso也可以指定加载的图片大小的:
    2. Picasso和Glide在磁盘缓存策略上有很大的不同。Picasso缓存的是全尺寸的,而Glide缓存的是跟ImageView尺寸相同的。

    IMEI的获取

    权限:

     <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    
     ```
    
    
     核心代码:
    
    ``` java
    Imei = ((TelephonyManager) getSystemService(TELEPHONY_SERVICE))
    .getDeviceId();
    
    
    
    
    <div class="se-preview-section-delimiter"></div>
    

    Android的性能优化

    1. 内存
      1). 减少占用
      2). 复用: 视图的复用, 对象的复用

    2. 速度
      1). 网络
      2). 多线程

    3. 响应时间
      1). 缓存: 增加内存, 提升访问速度;
      2). 显示加载进度
      3). 启动页预加载一部分内容

    Android项目工程的assets目录和raw目录的作用

    共同点:
    它们会被原封不动的拷贝到APK中,而不会像其它资源文件那样被编译成二进制的形式。

    由 于raw是Resources (res)的子目录,Android会自动的为这目录中的所有资源文件生成一个ID,这个ID会被存储在R类当中,作为一个文件的引用。这意味着这个资源 文件可以很容易的被Android的类和方法访问到,甚至在Android XML文件中你也可以@raw/的形式引用到它。在Android中,使用ID是访问一个文件最快捷的方式。MP3和Ogg文件放在这个目录下是比较合适 的。
    assets目录更像一个附录类型的目录,Android不会为这个目录中的文件生成ID并保存在R类当中,因此它与 Android中的一些类和方法兼容度更低。同时,由于你需要一个字符串路径来获取这个目录下的文件描述符,访问的速度会更慢。但是把一些文件放在这个目 录下会使一些操作更加方便,比方说拷贝一个数据库文件到系统内存中。要注意的是,你无法在Android XML文件中引用到assets目录下的文件,只能通过AssetManager来访问这些文件。数据库文件和游戏数据等放在这个目录下是比较合适的。

    接口和抽象类的区别

    一个类只能继承一个类(抽象类)(正如人不可能同时是生物和非生物),但是可以实现多个接口(吃饭接口、走路接口)。
    第一点. 接口是抽象类的变体,接口中所有的方法都是抽象的。而抽象类是声明方法的存在而不去实现它的类。
    第二点. 接口可以多实现,抽象类不行
    第三点. 接口定义方法,不能实现,而抽象类可以实现部分方法。
    第四点. 接口中基本数据类型为static 而抽类象不是的。

    一个线程安全的Singleton, 双重加锁

    public class Singleton{  
       private static Singleton instance = null;//是否是final的不重要,因为最多只可能实例化一次。  
       private Singleton(){}  
       public static Singleton getInstance(){  
           if(instance == null){  
               //双重检查加锁,只有在第一次实例化时,才启用同步机制,提高了性能。  
               synchronized(Singleton.Class){  
                   if(instance == null){  
                       instance = new Singleton();  
                   }  
               }  
           }  
           return instance;  
       }  
    }  
    
    
    
    
    
    <div class="se-preview-section-delimiter"></div>
    

    怎样写一个可以更新UI的Handler

    
    private class MyThread extends Thread{
        public void run() {
           // 可以更新UI的handler
           Handler handler = new Hanlder(Looper.getMainLooper());
    
        } 
    }
    
    

    RecyclerView和ListView的区别

    内容稍多, 请大家移步到: http://www.tuicool.com/articles/aeeaQ3J

    参考文章:

    http://www.cnblogs.com/colife/p/5480068.html
    http://www.cnblogs.com/sunzn/archive/2013/05/10/3064129.html
    http://www.cnblogs.com/dolphinX/p/3460545.html

    展开全文
  • Android面试常见问题

    2017-03-29 21:41:00
    Android面试常见问题 ...常用的布局有哪些?  2.Activity启动模式?  3.handler如何使用?在同一个线程中可以实例化多个handler么?简单介绍handler、looper、message queue之间的关系。在子线程中实例
    
      本人也算是面试经验丰富,经历了很多场面试。面试过程中,常常会重复性地遇到一些问题。这里把常见问题汇总下来,希望能对大家有所帮助。
      1.常用的布局有哪些?
      2.Activity启动模式?
      standard,singleTop,singleInstance,singleTask
      3.handler如何使用?在同一个线程中可以实例化多个handler么?简单介绍handler、looper、message queue之间的关系。在子线程中实例化handler和在主线程中有什么不同?handler怎么实现消息的优先级?
      handler先处理消息的callback,再处理handler的callback。最后处理handleMessage。
      4.进程间怎么通信?Activity启动时涉及到哪些进程间通信的知识?应用间怎么互相唤起?
      5.应用程序如何打包成apk?
      6.Android JNI的原理是什么?如何实现NDK?
      7.怎么优化ListView?写布局时要注意哪些事项?什么场景下用RecyclerView替代ListView比较好?
      8.怎么对内存进行优化?检测内存泄漏?怎么优化程序性能?用过哪些优化性能优化内存的工具?
      9.用过哪些开源框架?讲一讲开源框架的架构,原理等。
      10.https与http有什么区别?
      11.用过哪些设计模式?你们的代码中有哪些设计模式?单例模式如何实现?使用工厂模式的优点是什么?
    		12.view事件分发。
    		13.多线程的同步。
    		14.性能优化。
      面试每多答一个问题,就增加一分拿到offer的可能性,就多一分谈薪资的筹码。所以认真准备十分重要。希望本文对找工作的读者有所帮助,希望大家都能拿offer拿到手软。
      
    
    
    展开全文
  • 1.HTML5 有哪些新元素? ​ 常用的如header、footer、main、nav和新的音频元素audio、video图像元素canvas、svg等 2.HTML开头的DOCTYPE有什么用 ​ 告诉浏览器以何种模式来渲染文档,如果不写会以混乱模式解析 css...
  • 5.5 在使用非零位模式作为空指针内部表示机器上,NULL是如何定义? 5.6 如果NULL定义成#defineNULL((char*)0),不就可以向函数传入不加转换NULL了吗? 5.7 我编译器提供头文件中定义NULL为0L。为...
  • 2.1.1 集成开发环境有哪些 20 2.1.2 安装Eclipse 21 2.2 Eclipse界面介绍 23 2.2.1 启动Eclipse 23 2.2.2 EclipsePerspective 24 2.2.3 Eclipse菜单 25 2.2.4 Eclipse工具条 25 2.2.5 Eclipse辅助视图...
  • 5.5 在使用非零位模式作为空指针内部表示机器上,NULL 是如何定义? 56 5.6 如果NULL定义成#define NULL((char *)0) ,不就可以向函数传入不加转换NULL 了吗? 57 5.7 我编译器提供头文件中定义...
  • 2.1.1 集成开发环境有哪些 20 2.1.2 安装Eclipse 21 2.2 Eclipse界面介绍 23 2.2.1 启动Eclipse 23 2.2.2 EclipsePerspective 24 2.2.3 Eclipse菜单 25 2.2.4 Eclipse工具条 25 2.2.5 Eclipse辅助视图...
  • 2.1.1 集成开发环境有哪些 20 2.1.2 安装Eclipse 21 2.2 Eclipse界面介绍 23 2.2.1 启动Eclipse 23 2.2.2 EclipsePerspective 24 2.2.3 Eclipse菜单 25 2.2.4 Eclipse工具条 25 2.2.5 Eclipse辅助视图...
  • 《你必须知道495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    5.5 在使用非零位模式作为空指针内部表示机器上,NULL 是如何定义? 56 5.6 如果NULL定义成#define NULL((char *)0) ,不就可以向函数传入不加转换NULL 了吗? 57 5.7 我编译器提供头文件中定义...
  • 高并发、高性能、高可用

    千次阅读 2019-03-20 10:33:38
    互联网三高架构:高并发、高性能、高可用,简称三高(3H) ...具体来说,可以在不同层次常用的技术: 前端 浏览器优化技术:合理布局,页面缓存,减少http请求数,页面压缩,减少 cookie 传输。 CDN ...
  • 网址导航:展示常用的开发网站 搜索功能:输入搜索、搜索推荐、历史搜索等等 关于我们:鸿洋wanAndroid介绍 love爱意表达部分,程序员表白神器,简易含蓄的单身程序员可以看看该模块,可以给女朋友一个惊喜! 玩...
  • 有哪些主要模型? 答:软件生存周期模型是描述软件开发过程中各种活动如何执行模型。 主要模型包括:瀑布模型、增量模型、螺旋模型、喷泉模型、变换模型和基于知识模型。 5. 有哪些主要软件开发方法? ...
  • 好的笔记应是对所听内容作出的简要提纲,可以用关键词,也可以用一些自己常用的符号或字母来代替具体的单词,这样可以节省不少时间。  【重点听音】就是大家在听的时候要注意一些听音重点,一般来说时间变更处,...
  • 通用网站模板 v1.0.zip

    2019-07-09 03:41:06
    想知道访问您网站网民对您网站中哪些页面最兴趣吗? 这些功能我们都为您全面考虑并实现了! 后台可添加第三方网站统计代码,方便了解网站访问详情! 系统模块超强灵活性: 能给网站换个我想要界面吗...
  • 想知道访问您网站网民对您网站中哪些页面最兴趣吗? 这些功能我们都为您全面考虑并实现了! 后台可添加第三方网站统计代码,方便了解网站访问详情! 系统模块超强灵活性: 能给网站换个我想要界面吗...
  • 想知道访问您网站网民对您网站中哪些页面最兴趣吗? 这些功能我们都为您全面考虑并实现了! 后台可添加第三方网站统计代码,方便了解网站访问详情! 能给网站换个我想要界面吗?可以! 能给网站...
  • 办公家具网站 v1.0.zip

    2019-07-09 02:08:46
    想知道访问您网站网民对您网站中哪些页面最兴趣吗? 这些功能我们都为您全面考虑并实现了! 后台可添加第三方网站统计代码,方便了解网站访问详情! 系统模块超强灵活性: 能给网站换个我想要界面吗...
  • 想知道访问您网站网民对您网站中哪些页面最兴趣吗? 这些功能我们都为您全面考虑并实现了! 后台可添加第三方网站统计代码,方便了解网站访问详情! 系统模块超强灵活性: 能给网站换个我想要界面吗...
  • 想知道访问您网站网民对您网站中哪些页面最兴趣吗? 这些功能我们都为您全面考虑并实现了! 后台可添加第三方网站统计代码,方便了解网站访问详情! 系统模块超强灵活性: 能给网站换个我想要界面吗...
  • 集团公司网站 v1.0.zip

    2019-07-09 03:41:15
    想知道访问您网站网民对您网站中哪些页面最兴趣吗? 这些功能我们都为您全面考虑并实现了! 后台可添加第三方网站统计代码,方便了解网站访问详情! 系统模块超强灵活性: 能给网站换个我想要界面吗...
  • 想知道访问您网站网民对您网站中哪些页面最兴趣吗? 这些功能我们都为您全面考虑并实现了! 后台可添加第三方网站统计代码,方便了解网站访问详情! 系统模块超强灵活性: 能给网站换个我想要界面吗...
  • 1.页面性能优化办法有哪些 2.懒加载和预加载 3.函数节流和防抖. 4.常见六大Web安全攻防解析 | Vue全家桶 1.从头开始学习Vuex 2.从头开始学习vue-router 3.vue组件三大核心概念 4.vue组件间通信六种...
  • [Oracle.11g权威指南(第2版)].谷长勇.扫描版.pdf

    千次下载 热门讨论 2013-06-23 21:16:09
    这些操作在数据库的日常管理中是十分常用的。 12.1 表空间与数据文件的关系 288 12.2 Oracle 11g默认的表空间列表 289 12.2.1 SYSTEM表空间 289 12.2.2 SYSAUX表空间 290 12.3 建立表空间 291 12.3.1 创建表空间的...
  • BaseViewModel与BaseActivity通过LiveData来处理常用UI逻辑,即可在ViewModel中使用父类showDialog()、startActivity()等方法。在这个LoginViewModel中就可以尽情写你逻辑了! BaseFragment使用和...
  • 常用的方法 - getTime 获取时间对象的毫秒数 - setTime 设置时间对象的毫秒数,会改变日期 - getFullYear 获取时间对象的年(2015) - getMonth 获取时间对象的月(需要加1) - ...
  • 7.3 使用内建的布局类 156 7.3.1 使用AbsoluteLayout 158 7.3.2 使用FrameLayout 159 7.3.3 使用LinearLayout 161 7.3.4 使用RelativeLayout 162 7.3.5 使用TableLayout 165 7.3.6 在屏幕上使用多布局...
  • CruiseYoung提供详细书签电子书籍目录 http://blog.csdn.net/fksec/article/details/7888251 Google Android开发入门与实战(09年度畅销榜TOP50)(附赠400分钟高清教学视频 ,涵盖5大商业案例完整源代码) ...

空空如也

空空如也

1 2
收藏数 40
精华内容 16
关键字:

常用的布局模式有哪些