版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1抽象类和接口的区别?抽象类:抽象方法,只有行为的概念,没有具体的行为实现。使用abstract关键字修饰,没有方法体。子类必须重写这些抽象方法。包含抽象方法的类,一定是抽象类。抽象类只能被继承,一个类只能继承一个抽象类。接口:全部的方法都是抽象方法,属型都是常量不能实例化,可以定义变量。接口变量可以引用具体实现类的实例接口只能被实现,一个具体类实现接口,必须实现全部的抽象方法接口之间可以多实现一个具体类可以实现多个接口,实现多继承现象2列举你所知道的线程同步的方法:wait():让线程等待。将线程存储到一个线程池中。notify():唤醒被等待的线程。通常都唤醒线程池中的第一个。让被唤醒的线程处于临时阻塞状态。notifyAll():唤醒所有的等待线程。将线程池中的所有线程都唤醒。3简述String和StringBuffer、ArrayList和LinkedList、HashMap和HashTable的特点及区别。答:String对象的长度一旦定义就固定就不可以改变,对于已经存在的String对象的修改都是创建一个新的对象,然后把新的值存进去,String类不能被继承。StringBuffer是一个可变对象,当对它进行修改的时候不会像String那样重新建立对象。它只能通过构造函数来建立对象。另外StringBuffer还是一个线程安全的类。ArrayList是实现了基于动态数组的数据结构用于,LinkedList基于连表的数据结构,二者都可以存储对象的引用。对于随机访问get和set,ArrayList优于LinkedList,因为LinkedList要移动指针。对于新增和删除操作add和remove,LinkedList比较占优势,因为ArrayList要移动数据。
HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,在只有一个线程访问的情况下,效率要高于HashtableoHashMap允许将null作为一个entry的key或者value,而Hashtable不允许。HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Mapinterface的一个实现。最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap就必须为之提供外同步。Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。就HashMap与HashTable主要从三方面来说。历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java1.2引进的Map接口的一个实现同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的值:只有HashMap可以让你将空值作为一个表的条目的key或value4什么是java序列化,如何事件java序列序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。4什么是java序列化,如何事件java序列publicclassCatimplementsSerializable{}Try(FileOutputStreamfos=newFileOutputStream(〃catDemo.out〃);ObjectOutputStreamoos=newObjectOutputStream(fos);System.out.println("1>"+cat.getName());cat.setName("MyCat");oos.writeObject(cat);oos.close();}catch(Exceptione)(5多线程有几种实现方式,同步有几种实现方式,stop()和suspend()方法为什么不推荐使用多线程有两种实现方法,分别是继承Thread类与实现Runnable接口同步的实现方面有两种,分别是synchronized,wait与notify"反对使用stop(),是因为它不安全。它会解除由线程获取的所有锁定,而且如果对象处于一种不连贯状态,那么其他线程能在那种状态下检查和修改它们。结果很难检查出真正的问题所在。suspend。方法容易发生死锁。调用suspend()的时候,目标线程会停下来,但却仍然持有在这之前获得的锁定。此时,其他任何线程都不能访问锁定的资源,除非被"挂起"的线程恢复运行。对任何线程来说,如果它们想恢复目标线程,同时又试图使用任何一个锁定的资源,就会造成死锁。所以不应该使用suspend。,而应在自己的Thread类中置入一个标志,6简述你对java反射机制的理解JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性7写下你对多线程的理解,怎么创建一个线程以及线程同步的方法。多线程是操作系统的重要部分,可以提高应用程序的效率,将耗时操作放进工作线程,可以有效提高用户体验。2.newThread().start,在方法中重写run方法;亲斤建类实现Runable接口,重写其抽象方publicstaticsynchronizedvoidtest()(}publicvoidtest2()(synchronized(lock){}}8从操作系统角度请阐述一下线程与进程的区别答:进程是系统进行资源分配和调度的一个独立单位,线程是CPU调度和分派的基本单位进程和线程的关系:(1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。(2)资源分配给进程,同一进程的所有线程共享该进程的所有资源。(3)线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。(5)线程是指进程内的一个执行单元,也是进程内的可调度实体。线程与进程的区别:(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位。(2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可以并发执行。(3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源。(4)系统开销:在创建或撤销进程的时候,由于系统都要为之分配和回收资源,导致系统的明显大于创建或撤销线程时的开销。但进程有独立的地址空间,进程崩溃后,在保护模式下不会对其他的进程产生影响,而线程只是一个进程中的不同的执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但是在进程切换时,耗费的资源较大,效率要差些。9Android系统的架构,采用了分层的架构,从高层到底层分别是:Android系统架构之应用程序Android会同一系列核心应用程序包一起发布,该应用程序包包括email客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等。所有的应用程序都是使用JAVA语言编写的。Android系统架构之应用程序框架开发人员可以完全访问核心应用程序所使用的API框架(android.jar)。该应用程序的架构设计简化了组件的重用;任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块。Android系统架构之系统运行库1)程序库Android包含一些C/C++库,这些库能被Android系统中不同的组件使用。它们通过Android应用程序框架为开发者提供服务。Android系统架构之Linux内核Android的核心系统服务依赖于Linux2.6内核,如安全性,内存管理,进程管理,网络协议栈和驱动模型。Linux内核也同时作为硬件和软件栈之间的抽象层。10消息推送的方式有哪几种,每种方式的优缺点是什么?前Android上主要的推送实现方案有以下几种:方案1、使用极光和友盟推送。方案2、使用XMPP协议(Openfire+Spark+Smack)简介:基于XML协议的通讯协议,前身是Jabber,目前已由IETF国际标准化组织完成了标准化工作。优点:协议成熟、强大、可扩展性强、目前主要应用于许多聊天系统中,且已有开源的ava版的开发实例androidpn。缺点:协议较复杂、冗余(基于XML)、费流量、费电,部署硬件成本高。方案3、使用MQTT协议(更多信息见:/)简介:轻量级的、基于代理的“发布/订阅”模式的消息传输协议。优点:协议简洁、小巧、可扩展性强、省流量、省电,目前已经应用到企业领域(参考:/software),且已有C++版的服务端组件rsmb。缺点:不够成熟、实现较复杂、服务端组件rsmb不开源,部署硬件成本较高。方案4、使用HTTP轮循方式简介:定时向HTTP服务端接口(WebServiceAPD获取最新消息。优点:实现简单、可控性强,部署硬件成本低。缺点:实时性差。11android的数据存储的方式?答:Android提供了5种方式存储数据:(1)使用SharedPreferences存储数据;它是Android提供的用来存储一些简单配置信息的一种机制,采用了XML格式将数据存储到设备中。只能在同一个包内使用,不能在不同的包之间使用。(2)文件存储数据;文件存储方式是一种较常用的方法,在Android中读取/写入文件的方法与Java中实现I/O的程序是完全一样的提供了openFileInput()和openFileOutput()方法来读取设备上的文件。(3)SQLite数据库存储数据;SQLite是Android所带的一个标准的数据库,它支持SQL语句,它是一个轻量级的嵌入式数据库。(4)使用ContentProvider存储数据;主要用于应用程序之间进行数据交换,从而能够让其他的应用保存或读取此ContentProvider的各种数据类型。(5)网络存储数据;通过网络上提供给我们的存储空间来上传(存储)和下载(获取)我们存储在网络空间中的数据信息。12横竖屏切换时候activity的生命周期?不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,设置Activity的android:configChanges="orientation|keyboardHidden'时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法13Android中动画分为哪几类?他们的特点和区分有那些?一种是tweenedanimation(补卜间动画)一种是framebyframe(逐帧动画)特点:补间动画是通过改变view的大小、旋转的角度、透明度、位置来产生动画,可以控制动画的播放快慢以及加速度。逐帧动画是用一组图片轮流绘制,产生动画的感觉。类似于gif图片。区别:补间动画的所有操作是通过矩阵变换对同一个物体(绘制的一个view或者图片)进行操作产生动画。而逐帧动画是多个物体(多张图片)进行绘制,可以说这多张图片是不相关的(从播放的角度来看只能说是内容相关)
14解释下在单线程模式中14解释下在单线程模式中Message,Handler,MessageQueue,Looper之间的关系解释下.Handler获取当前线程中的looper对象,looper用来从存方攵Message的MessageQueue中取出Message,再有Handler进彳亍Message的分发和处理.MessageQueued息队列):用来存放通过Handler发布的消息,通常附属于某一个创建它的线程,可以通过Looper.myQueue(得到当前线程的消息队列.Handler:可以发布或者处理一个消息或者操作一个Runnable,通过Handler发布消息,消息将只会发送到与它关联的消息队列,然也只能处理该消息队列中的消息Looper:是Handler和消息队列之间通讯桥梁,程序组件首先通过Handler把消息传递给Looper,Looper把消息放入队列。Looper也把消息队列里的消息广播给所有的Handler:Handler接受到消息后调用handleMessage进行处理.15说说mvc模式的原理,它在android中的运用答:android的官方建议应用程序的开发采用mvc模式。何谓mvc?mvc是model,view,controller的缩写,mvc包含三个部分:l模型(model)对象:是应用程序的主体部分,所有的业务逻辑都应该写在该层。2视图(view)对象:是应用程序中负责生成用户界面的部分。也是在整个mvc架构中用户唯一可以看到的一层,接收用户的输入,显示处理结果。3控制器(control)对象:是根据用户的输入,控制用户界面数据显示及更新model对象状态的部分,控制器更重要的一种导航功能,想用用户出发的相关事件,交给m哦得了处理。在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里面处理,当然对业务计算等操作也是必须放在的该层的。16请描述下Activity的生命周期.onCreate(BundlesavedInstanceState):创建activity时调用。设置在该方法中,还以Bundle的形式提供对以前储存的任何状态的访问!onStart():activity变为在屏幕上对用户可见时调用。onResume():activity开始与用户交互时调用(无论是启动还是重新启动一个活动,该方法总是被调用的),onPause():activity被暂停或收回cpu和其他资源时调用,该方法用于保存活动状态的,也是保护现场,压栈吧!onStop():activity被停止并转为不可见阶段及后续的生命周期事件时调用。onRestart():重新启动activity时调用。该活动仍在栈中,而不是启动新的活动。OnDestroy():activity被完全从系统内存中移除时调用该方法17Android中4大组件有哪些?他们的作用是什么?Activity:Activity是Android程序与用户交互的窗口,是Android构造块中最基本的一种,它需要为保持各界面的状态,做很多持久化的事情,妥善管理生命周期以及一些跳转逻辑。service:后台服务于Activity,封装有一个完整的功能逻辑实现,接受上层指令,完成相关的事务,定义好需要接受的Intent提供同步和异步的接口。ContentProvider:是Android提供的第三方应用数据的访问方案,可以派生ContentProvider类,对外提供数据,可以像数据库一样进行选择排序,屏蔽内部数据的存储细节,向外提供统一的接口模型,大大简化上层应用,对数据的整合提供了更方便的途径。BroadCastReceiver:接受一种或者多种Intent作触发事件,接受相关消息,做一些简单处理,转换成一条Notification,统一了Android的事件广播模型。18Activity有哪4种启动模式?有哪些特standard默认模式来了intent,每次都创建新的实例。singleTop来了intent,每次都创建新的实例,仅一个例外:当栈顶的activity恰
恰就是该activity的实例(即需要创建的实例)时,不再创建新实例。这解决了栈顶复用问题,想一想,你按两次back键,退出的都是同一个activity,这感觉肯定不爽。singleTask来了intent后,检查栈中是否存在该activity的实例,如果存在就把intent发送给它,否则就创建一个新的该activity的实例,栈中只能有它一个该activity实例,但允许其他activity加入该栈。解决了在一个task中共享一个activity。singleinstance肯定位于一个task的栈底,并且是该栈唯一的activity。解决了多个task了多个task共享,个activity。19注册广播有几种方式,这些方式有何特1)动态代码注册不是常驻型广播,也就是说广播跟随程序的生命周期。2)清单文件注册是常驻型,也就是说当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行。20谈谈对android内存优化的方法,方案,规则及对内存泄漏如何避免OOM即OutOfMemory,一般是由程序编写者对内存使用不当,如对该释放的内存资源没有释放,导致其一直不能被再次使用而使内存被耗尽的现象。根本的解决办法是对代码进行优化:在内存引用上做些处理,使用软引用、虚引用、和弱引用;在内存中加载图片时直接在内存中做处理,如边界压缩等;建立动态回收内存机制;优化Dalvik虚拟机的堆内存分配;自定义堆内存大小等。一般而言,android中常见的原因主要有以下几个:数据库的cursor没有关闭。构造adapter没有使用缓存contentview。调用registerReceiver()后未调用unregisterReceiver().未关闭InputStream/OutputStream。Bitmap使用后未调用recycle。。Context泄漏。static关键字等。21启动service有几种方式,说出他们之间的主要区别答:调用startService():通过此种方法启动的service会一直运行在后台直到stopService()或stopSelf()方法被调用。调用bindService():通过此种方法启动的service会与调用者绑定,如果这个service还没有被启动,那么service启动时将不会调用onStart(),只调用onCreate()^donBind(),调用者被销毁时,service也被销毁22intent.putExtra时,如果传递的不是基本类型,而是一个”Object”,那么对这个对象有什么要求?还是说任何对象都可以进行传递?答:必须实现Serializable接口,或者实现Parcelable接口的对象才可以进行传递。23当调用startActivityForResult时,如何获取并处理返回的结构答:通过onActivityResult(intrequestCode,intresultCode,Intentdata处理返回的数据requestCode:调用startActivityForResult(Intentintent,intrequestCode)时传递过去的请求码。resultCode:被调用的Activity执彳亍setResult(intresultCode,Intentintent时传递的结果码,一般有RESULT_CANCELED,RESULT_OK等,用于区分被调用的Activity传回的不同结果data:被调用的Activity传回来的数据,可以用data.getExtras()得到数据,用Bundle类型的变量来接收,调用get...(String1<。尸)来获取对应的值24使用startService()和bindService()启一个Service,这个Sercice的生命周期会有哪里不同?答:1.Context.startService()方式的生命周期:启动时,startService->onCreate()->onStart()停止时,stopService->onDestroy()如果调用者直接退出而没有停止Service,则Service会一直在后台运行Context.startService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onStart()方法。如果调用startService()方法前服务已经被创建,多次调用startService()方法并不会导致多次创建服务,但会导致多次调用onStart()方法。采用startService()方法启动的服务,只能调用Context.stopService()方法结束服务,服务结束时会调用onDestroy()方法附代码Context.bindService()方式启动:①Context.bindService()方式的生命周期:绑定时,bindService->onCreate()->onBind()调用者退出了,即解绑定时,Srevice就会unbindService->onUnbind()->onDestory()Context.bindService()方式启动Service的方法:绑定Service需要三个参数:bindService(intent,conn,Service.BIND_AUTO_CREATE)第一^:Intent对象第二个:ServiceConnection对象,创建该对象要实现它的onServiceConnected()和onServiceDisconnected()来判断连接成功或者是断开连接第三个:如何创建Service,一般指定绑定的时候自动创建。25Android中什么是ANR,如何应对或者如何避免它?答:ANR就是applicationnotresponding在android中Activity的最长执行时间是5秒.BroadcastReceiver的最长执行时间则是10秒.超出执行时间就会产生ANR.解决方法:1.运行在主线程里的任何方法都尽可能少做事情。特别是,Activity应该在它的关键生命周期方法(如onCreate(^onResume())里尽可能少的去做创建操作。(可以采用重新开启子线程的方式,然后使用Handler+Message的方式做一些操作,比如更新主线程中的ui等)2.应用程序应该避免在BroadcastReceiver里做耗时的操作或计算。但不再是在子线程里做这些任务(因为BroadcastReceiver的生命周期短),替代的是,如果响应Intent广播需要执行一个耗时的动作的话,应用程序应该启动一个Service。26AIDL的全称是什么?如何工作?能处理哪些类型的数据?答:AIDL:(AndroidInterfaceDefinitionLanguage)跨进程通信传输语言如何工作:AIDL文件由自己定义,在被绑定的Service中和绑定的客户端中都要部署创建AIDL文件,在这个文件里面定义接口,该接口定义了可供客户端访问的方法和属性。2、编译AIDL文件,用Ant的话,可能需要手动,使用Eclipseplugin的话,可以根据adil文件自动生产java文件并编译,不需要人为介入.3、在Java文件中,实现AIDL中定义的接口.编译器会根据AIDL接口,产生一个JAVA接口。这个接口有一个名为Stub的内部抽象类,它继承扩展了接口并实现了远程调用需要的几个方法(是Binder的子类)。接下来就需要自己去实现自定义的几个接口了.第一个程序的Service:因为跨进程传递时利用Binder对象来实现的,所以我们要在Service端构建Binder对象,又因为我们定义的接口AIDL文件在编译转成.java|时的内部类Sub实现了Binder,所以我们构建Binder对象时构建实例内部类直接继承Sub内部类,在类中我们可以调用Service中的方法,此匕类的对象也就是Binder对象.第二个程序的Activity在Activity中我们利用bindService方法启动一个绑定的Service的同时需要传入连接对象,所以我们先在Activity中构建Service的连接对象,在该对象的匿名内部类中重写获得Binder对象的方法,参数含有Binder对象,将此对象强制转换成我们在Service中继承Sub的类的对象,强转后我们可以利用该对象调用Service中的方法,从而实现跨进程通信,控制Service.27请简单介绍一下27请简单介绍一下NDK。«=|NDK全称:NativeDevelopmentKit。1、NDK是一系列工具的集合。*NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者的帮助是巨大的。28你后台的Activity被系统回收怎么办:当你的程序中某一个ActivityA在运行时中,主动或被动地运行另一个新的ActivityB这个时候A会执行Java代码publicvoidonSaveInstanceState(BundleoutState)(super.onSaveInstanceState(outState);outState.putLong("id",1234567890);}publicvoidonSaveInstanceState(BundleoutState)(B完成以后又会来找A,这个时候就有两种情况,一种是A被回收,一种是没有被回收,被回收的A就要重新调用onCreate()方法,不同于直接启动的是这回onCreate()里是带上参数savedInstanceState,没被收回的就还是onResume就好了。savedInstanceState是一个Bundle对象,你基本上可以把他理解为系统帮你维护的一个Map对象。在onCreate()里你可能会用到它,如果正常启动onCreate就不会有它,所以用的时候要判断一下是否为空。Java代码if(savedInstanceState!=null)(longid=savedInstanceState.getLong("id");}if(savedInstanceState!=null)(就像官方的Notepad教程里的情况,你正在编辑某一个note,突然被中断,那么就把这个note的id记住,再起来的时候就可以根据这个id去把那个note取出来。29怎么优化listview1、如果自定义适配器,那么在getView方法中要考虑方法传进来的参数contentView是否为null,如果为null就创建contentView并返回,如果不为null则直接使用。在这个方法中尽可能少创建view。2、给contentView设置tag(setTag()),传入一个viewHolder对象,用于缓存要显示的数据,可以达到图像数据异步加载的效果。3、如果listview需要显示的item很多,就要考虑分页加载。比如一共要显示100条或者更多的时候,我们可以考虑先加载20条,等用户拉到列表底部的时候再去加载接下来的20条。4、设置listview的监听器,如果listview是飞快滑动状态则不更新view30根据自己的理解描述下Android数字签名。所有的应用程序都必须有数字证书,Android系统不会安装一个没有数字证书的应用程序Android程序包使用的数字证书可以是自签名的,不需要一个权威的数字证书机构签名认证如果要正式发布一个Android,必须使用一个合适的私钥生成的数字证书来给程序签名。⑷数字证书都是有有效期的,Android只是在应用程序安装的时候才会检查证书的有效期。如果程序已经安装在系统中,即使证书过期也不会影响程序的正常功能。31简述Androidroot机制答:root指的是你有权限可以再系统上对所有档案有〃读〃〃写〃〃执行〃的权力。root机器不是真正能让你的应用程序具有root权限。它原理就跟linux下的像sudo这样的命令。在系统的bin目录下放个su程序并属主是root并有suid权限。则通过su执行的命令都具有Androidroot权限。当然使用临时用户权限想把su拷贝的/system/bin目录并改属性并不是一件容易的事情。这里用到2个工具跟2个命令。把busybox拷贝到你有权限访问的目录然后给他赋予4755权限,你就可以用它做很多事了。32进程间通信机制,传统IPC和Binder答:传统的进程间通信机制IPC有管道(Pipe)、信号(Signal)和跟踪(Trace),这三项通信手段只能用于父进程和子进程之间,或者兄弟进程之间;后来又增加了命令管道(NamedPipe),使得进程间通信不再局限于父子进程或兄弟进程之间。后来又出现了报文队列(Message)、共享内存(ShareMemeory)和信号量(Semaphore)oAndroid系统没有采用上述提到的各种进程间通信机制,而是采用Binder机制,它是基于OpenBinder来实现的。它提供了远程过程调用(RPC)功能,在Android系统的Binder机制中,有一系列组件组成包括Client、Server、ServiceManager和Binder驱动程序。Serializable和Parcelable的特点及比较答:Serializable和Parcelable二者都是实现序列化的接口。Parcelable,定义了将数据写入Parcel,和从Parcel中读出的接口。一个实体(用类来表示),如果需要封装到消息中去,就必须实现这一接口,实现了这一接口,该实体就成为“可打包的”了。一个对象序列化的接口,一个类只有实现了Serializable接口,它的对象才是可序列化的。因此如果要序列化某些类的对象,这些类就必须实现Serializable接口。而实际上,Serializable是一个空接口,没有什么具体内容,它的目的只是简单的标识一个类的对象可以被序列化。Serializable的实现,只需要implementsSerializable即可,这只是给对象打了一个标记,系统会自动将其序列化。Parcelable的实现,需要在类中添加一个静态成员变量CREATOR,这个变量需要继承Parcelable.Creator接口。比较:Serializable是Java.io中的,不可被activity中的内部类被继承,否则出错;Parcelable是Android特有的,比Serializable节省内存,可以传递Bundle对象,当我们有boolean型的变量可以现存在Bundle中。View、surfaceView、GLSurfaceView有什么区别View:显示视图,内置画布,提供图形绘制函数、触屏事件、按键事件函数等,必须在UI主线程内更新画面,速度较慢SurfaceView:基于view视图进行拓展的视图类,更适合2D游戏的开发,是view的子类,类似使用双缓机制,在新的线程中更新画面所以刷新界面速度比view快GLSurfaceView:基于SurfaceView视图再次进行拓展的视图类,专用于3D游戏开发的视图,是SurfaceView的子类,openGL专用35你曾经用到的android手机访问服务端的方式有哪些?Android手机访问服务端的方式有两种,分别是:通过socket访问和通过Http协议发送Post和Get请求。Socket是长连接,服务端和客户端之间通过Socket建立连接,首先ServerSocket将在服务端监听某个端口,当发现客户端有Socket来试图连接它时,它会接受该Socket的连接请求,同时在服务端建立一个对应的Socket与之进行通信。这样就有两个Socket了,客户端和服务端各一个。发送get和post协议,通过HTTP协议建立短连接。客户端发送请求(Request),服务器端收到后根据请求的类型返
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 药品记录与数据管理要求培训课件
- 福建省2024八年级数学上册第11章数的开方期末复习课件新版华东师大版
- 水彩梅花课件教学课件
- 糖尿病日宣传活动总结
- 车间事故应急处理
- 剖腹产产后护理超详细
- 好玩的梯子说课稿
- 安全教育在走廊和楼梯上
- 旅游规划品牌授权准则
- 商品砼合同书
- 生而为赢-新东方英语背诵美文30篇
- 居住外地离退休人员联系服务工作制度(试行)
- 培养学生自主学习能力(精编课件)
- LED照明基础知识介绍幻灯片
- 基础乐理 《节拍节奏》课件
- DB15T 1394-2018 软件工程项目价格测算规范
- 领导干部要树立正确的政绩观课件
- 郭墅中心小学四年级上册朗文课外阅读试题与答案
- 高热惊厥的急救培训课件
- 选科分班(家长)演示稿课件
- 预防校园欺凌主题班会课件(共36张PPT)
评论
0/150
提交评论