Android考试知识点考试.doc_第1页
Android考试知识点考试.doc_第2页
Android考试知识点考试.doc_第3页
Android考试知识点考试.doc_第4页
Android考试知识点考试.doc_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、考试知识点(Android闭卷考试)1. 理解Android常见的几种布局。几种布局的高和宽,制定LinearLayout,线性布局,布局中的控件在线性方向上依次排列。默认控件水平方向排列。android:orientation=”horizontal”android:orientation=”vertical”注意:当是水平方向排列,控件宽度不能设置为android:layout_width=match_parent否则控件会把水平方向沾满,其他控件无法会控件覆盖(无法放置)当是垂直方向,内部控件不能将android:layout_height=match_parent指定为match_pa

2、rent android:layout_weight=1,使用比例方式来指定控件的大小RelativeLayout,相对布局,是通过相对定位的方式让布局中控件可以出现在布局的任何位置。内部控件,三种属性, 属性值是true或falseandroid:layout_centerHrizontal 水平居中,属性值是”id/*“android:layout_below 在某元素的下方属性值是数值android:layout_marginLeft 离某元素左边缘的距离FrameLayout,帧布局,简单,应用场景少,和碎片一起使用,没有定位方式,所有控件默认在布局的左上角,后面的会覆盖前面的。每一个

3、组件都代表一个画面用该布局可以实现动画效果PercentFrame(Relative)Layout 百分比布局:布局中可以不用wrap_content,match_parent等方式来指定控件的大小,直接指定控件所占的百分比,实现平分布局甚至任意比例分割布局。注意百分比布局需要添加库依赖 support:percent:24.由于LinearLayout本身支持按比例指定控件大小,所以百分比布只为RelativeLayout和RelativeLayout功能扩展表格布局(Tablelayout)采用行列的形式管理UI组件,无需明确地声明它的行列数, 而是通过添加TableRow、其他组件来控制

4、表格的行数和列数GridLayout是Android4.0之后新增的布局管理器,因此正常情况下需要在 Android 4.0 之后的版本中才能使用,如果希望在更早的版本中使用的话,需要导入相应的支撑库(v7包的gridlayout包)。Grid Layout 网格布局,和前面所讲的 Table Layout(表格布局) 有点类似,不过他有很多前者没有的东西,因此也更加好用:- 可以自己设置布局中组件的排列方式- 可以自定义网格布局有多少行、列- 可以直接设置组件位于某行某列- 可以设置组件横跨几行或者几列Absolute Layout 它不提供任何布局控制,而是由开发人员自己通过X、Y坐标来控

5、制组件的位置。运行Android应用的手机往往千差万别,屏幕大小、分别率、屏幕密度等都可能存在较大的差异,使用绝对布局的话很难做机型适配-已经被废弃2. 理解Android应用程序开发过程中,常见的四种设计模式及各自的使用场合。ListView-Adapter、Builder-Dialog、Factory-选项卡、Listener-事件监听。1适配器模式:简介:将一个类的接口转换成客户希望的另外一个接口,从而使原本因接口不匹配而无法再一起工作的两个类能够在一起工作。不同的数据提供者使用一个适配器来向一个相同的客户提供服务。举例:ListView或GridView的Adapter。2建造者模式:

6、简介:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的显示,但其根本还是不变。举例:AlertDialog.Builder.AlertDialog.Builder, 使用该Builder来构建复杂的AlertDialog对象工厂模式:定义一个用于创建对象的接口,让子类决定将哪一个类实例化。外部不需要关心工厂是如何创建一个复杂产品的过程示例:BitmapFactory位图工厂,专门用来将指定的图片转换为指定的位图Bitmap。监听器模式事件源经过事件的封装传给监听器,当事件源触发事件后,监听器接收到事件对象可以回调事件的方法.Listener-事件监听观察者模式:定义对象间是

7、一(Subject)对多(Observer)的依赖关系,当一个对象发生变化时,其它依赖该对象的对象都会收到通知,并随着变化。广播机制就是观察者模式ListView和BaseAdapter组合时,当BaseAdapter的item改变时,我们经常会调用notifyDataSetChanged(),通知Listview刷新3. Android中可支持网页的缩放的视图(View)及其功能在Android系统中,内置了一款高性能的浏览器,其内核就是WebKit,WebView网页视图,就是在这个基础上封装的一个控件,我们可以直接用这个控件在应用程序内去显示Web页面,直接用HTML文件做为布局文件,可

8、以和JavaScript交互调用。显示和渲染web页面(1) .直接显示网页 设置在当前应用中打开网页,如果不设置的话会使用手机浏览器打开网页 mWebView.setWebViewClient(new WebViewClient() Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) view.loadUrl(/); return true; ); mWebView.loadUrl(/

9、);(2) 和js交互设置支持JavascriptWebSettings settings = webView.getSettings();settings.setJavaScriptEnabled(true);(3) 可以利用html做界面布局4. 理解View和ViewGroup的用途及两者之间的关系。继承结构:View是ViewGroup的父类类。View是所有UI组件的基类,而 ViewGroup是容纳这些组件的容器,其本身也是从View派生出来的.View中所有的子类成为widgets,viewgroup的子类成为layout。View和ViewGroup之间采用了组合设计模式,可以

10、使得“部分-整体”同等对待。ViewGroup作为布局容器类的最上层,布局容器里面又可以有View和ViewGroup。对于setContentView(R.layout.layout的xml文件)方法,Activity其实不是显示视图(直观上感觉是它),实际上Activity调用了PhoneWindow的setContentView()方法,然后加载视图,将视图放到这个Window上,而Activity其实构造的时候初始化的是Window(PhoneWindow),Activity其实是个控制单元,即可视的人机交互界面。Activity是一个工人,它来控制Window;Window是一面显示

11、屏,用来显示信息;View就是要显示在显示屏上的信息,这些View都是层层重叠在一起(通过infalte()和addView())放到Window显示屏上的。而LayoutInfalter就是用来生成View的一个工具,XML布局文件就是用来生成View的原料。(2).Activity、Window、View之间的关系:Activity是Window和View之间的桥梁,将View的内容信息显示在Window窗口上面。5. 理解Android网络编程中,常见的数据传输格式。网络传输中最常见的有xml和json ,还有protocol buffers,gzip,ThriftXml通过Pull,S

12、AX和Dom方式解析Json用JSONObject和GSON解析。Protocol Buffers一种数据描述语言,类似于XML能够将结构化数据序列化类似于XML,但更小,更快,更简单经常用到json、xml等格式的数据,这些数据在传输前可以进行压缩,这时候就会涉及到一种压缩格式Gzip。Gzip的压缩比率非常大,有的甚至能达到70%以上,可以大大减少传输内容,提高用户的传输速度,进而提高用户的体验6. 理解基本组件Activity的相关知识(如重载方法等)。Android应用有四大组件Activity、Service、BroadcastReceiver、ContentProviderCont

13、entProvider组件:用于Android应用之间实现实时的数据交换。常和ContentResolver一起使用BroadcastReceiver组件:广播消息接收器,类似于事件编程中的监听器,但是不同的是普通的事件监听器监听的事件源是程序中的对象,而BroadcastReceiver监听的事件源是Android应用程序中的其它组件。Service组件: 通常位于后台运行,一般不需要与用户交互,所以没有图形界面。Service组件运行起来后会有独立的生命周期,它通常用于为其他组件提供后台服务或监控其他组件的运行状态(1) activity是一种可以包含用户界面的组件,主要用于和用户进行交互

14、表现形式是一个屏幕,功能是显示界面,消息传递整个生命周期:onCreate()-onDestroy()可见的生命周期:onStart()-onStop()前台的生命周期:onResume()-onPause()运行,暂停(不在栈顶,但可见),停止(完全不可见,有可能因内存不够被回收),销毁(从栈中移除覆盖了activity生命周期的每一个环节onCreate():当activity是被创建时候,会自动运行该方法。该方法做一些初始化动作,比如加载布局,绑定时间等。onStart():活动在有不可见变为可见的时候调用。onResume():当activity开始与用户交互(获得焦点)时,会调用on

15、Resume,此是活动一定位于返回栈的栈顶,并处于运行状态。onPause():当系统准备启动或恢复另一个活动时调用。此时活动处于暂停状态(当一个活动不再处于栈顶的位置,但仍然可见,弹出一个对话框或者一个不能占满屏幕的活动都会导致前一个活动处于暂停状态)通常会在这个方法中释放掉一些占用cpu的资源onStop():当这个activity完全看不见的时候,会调用onStop方法。以下三种情况都会使这个activity调用onStop()方法,第一种是一个新的activity被执行,第二种是一个已经存在的activity被切换到最前端,第三种是这个activity要被销毁。onRestart():

16、把activity从停止状态变为运行状态,活动被重新启用。onDestroy():当activity销毁前会调用该方法,之后变为销毁状态。理解何时需要在Activity中重写方法onActivityResult?当使用startActivityForResult()(在第一个活动中)方法启动另一个Activity时,需要在第一个活动中重写onActivityResult()方法,获得被启动Activity返回的结果。Intent intent=new Intent(this,secondeActivity.class);startActivityForResult(intent,int 请求码

17、);重写 Override protected void onActivityResult(int requestCode, int resultCode, Intent data) String result = data.getExtras().getString(result);/得到新Activity 关闭后返回的数据 Log.i(TAG, result); 在第二个活动中:点击事件中/数据是使用Intent返回 Intent intent = new Intent(); /把返回数据存入Intent intent.putExtra(result, My name is linjiqi

18、n); /设置返回数据 OtherActivity.this.setResult(RESULT_OK, intent); /关闭Activity OtherActivity.this.finish();7理解在Intent传递数据时使用的几种数据类型。基本数据类型Serializable、将一个对象序列化后转换成可以传输的状态,序列化的方法是让类自身继承Serializable接口Person p=new Person();p.setname();.Intent intent=new Intent(源活动,目标活动.class);intent.putExtra(“名字”,p);接受数据:Per

19、son p2=getIntent().getSerializableExtra(“名字);Parcelable,同样需要类继承Parcelable接口,但需要在person类中重写接口中两个方法,必须有一个实现了Parcelable.Creator接口的静态常量成员字段。接受数据方法getIntent.getParcelableExtra(“名字);CharSequence、CharSequence接口,实现了这个接口的类有:CharBuffer、String、StringBuffer、StringBuilder这个四个类。所以处理String或者StringBuffer的类就不用重载。Bun

20、dle:一种存放字符串和Parcelable类型数据的map类型的容器类,通过存放数据键(key)获取对应的各种类型的值(value),而且必须通过键(key)获取。Intent intent = new Intent();intent.setClass(activity1.this, activity2.class);/描述起点和目标Bundle bundle = new Bundle();/创建Bundle对象bundle.putString(something, Activity1发来的数据);/装入数据intent.putExtras(bundle);/把Bundle塞入Intent里

21、面startActivity(intent);/开始切换Activity2接收数据Intent intent = this.getIntent();/获取已有的intent对象Bundle bundle = intent.getExtras();/获取intent里面的bundle对象string = bundle.getString(something);/获取Bundle里面的字符串8 理解Android中包含哪几个标准的“选择”部件(View)。 RadioButton单选按钮(同一组RadioButton放在一个RadioGroup中) CheckBox复选框 Spinner下拉列表框

22、 DatePicker日期选择组件 TimePicker事件选择组件 NumberPicker数值选择组件9理解Android工程中哪些目录中的文件是由Eclipse自动编译生成。src、存放的是该项目的源代码bin、编译后自动生成目录。二进制文件,包括class、资源文件、dex、apk等gen、自动生成的文件目录。该目录下的文件全部都是ADT自动生成的,一般并不需要去修改,实际上该目录下只定义了一个R.java文件,该文件相当于项目的字典,为项目中用户界面、字符串、图片等资源都会在该类中创建其惟一的IDres存放应用程序中经常使用的资源文件等。9 理解SQLite的一般用法。SQLite是

23、一款轻量级关系型数据库。安卓内置SQLite。SQLiteOpenHelper:SQLiteOpenHelper是是一个辅助类。这个类主要生成一个数据库,并对数据库的版本进行管理。当在程序当中调用这个类的方法getWritableDatabase()或者 getReadableDatabase()方法的时候,创建或打开一个现有的数据库,并返回一个SQLiteDatabase对象用于对数据库进行读写操作。当数据库不可写入(磁盘已满),getReadabelDatabase()返回的对象将以只读的方式打开数据库,getReadableDatabase()出现异常。构造方法:public MyDat

24、agbaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) this,数据库名.db,null,版本1 super(context, name, factory, version);SQLiteOpenHelper 是一个抽象类,我们通常需要继承它,并且实现里面的2个抽象方法:1.onCreate(SQLiteDatabase db)db.execSQL(sql语句,建立表)在数据库第一次生成(调用getdat.和getWriteabledatabase方法)的时候会

25、调用这个方法,也就是说,只有在创建数据库的时候才会调用,当然也有一些其它的情况,一般我们在这个方法里边生成数据库表。2.onUpgrade(SQLiteDatabase,int,int)当数据库需要升级(修改表,创建新表,数据备份,删除表)的时候,Android系统会调用这个方法。比如增加一张表。这里要db.execSQL(sql语句)如果是建的表已经存在,就要先删除,或不建。3.onOpen(SQLiteDatabase)非抽象:当打开数据库时的回调函数。SQLiteDatabase sqlitedatabase=sqliteDBHelper.getWritableDatabase()插入操

26、作 ContentValues cv = new ContentValues(); cv.put(COLUMN_NAME, person.getName(); cv.put(COLUMN_AGE, person.getAge(); /当cv参数为空或者没有内容的时候,insert会失败,为了防止这种情况发生, / 要在第二个参数设置一个列名,当要插入的行为空行时,将指定的列名值设置为null sqliteDataBase.insert(TABLE_NAME, null, cv);更新: sqliteDataBase.update(TABLE_NAME, cv, COLUMN_ID + =?,

27、new StringString.valueOf(person.getId();第三个和第4个参数不指定,默认更新所有行删除sqliteDataBase.delete(TABLE_NAME, COLUMN_ID + =?, new StringString.valueOf(id);,后面的两个参数不指定的话默认删除所有行或者直接用sql来操作sqliteDataBase.execSQL(sql语句,new String参数.);11. 理解正确设置onClickListener所需要的几个基本步骤。 View.OnClickListener:单击事件的监听器必须实现的接口基于监听的事件处理模型

28、: 获取普通界面组件(事件源),也就是被监听的对象 实现事件监听器类,该监听器类是一个特殊的Java类,必须实现一个OnClickListener接口 调用事件源的setOnClickListener()方法注册事件监听器常见的实现方法:a.匿名内部类xml布局文件中添加组件,设置组件id;在activity中获取对应id的组件,用setOnClickListener(new OnClickListener()的方式绑定控件与事件监听器,在内部类中重载onClick()方法,实现想要的功能。a的优化方案:使用内部类,还有外部类,但很少用在Activity中定义一个内部类继承监听器接口,或new

29、一个该监听器的对象setOnClickListener(对象实例)xml布局文件中添加组件,设置组件id;在activity中编写内部类实现OnClickListener,实现onClick()方法。绑定按钮与事件监听器:button.setOnClickListener(内部类的对象);btnshow.setOnClickListener(new BtnClickListener(); /定义一个内部类,实现View.OnClickListener接口,并重写onClick()方法 class BtnClickListener implements View.OnClickListener

30、Override public void onClick(View v) Toast.makeText(getApplicationContext(), 按钮被点击了, Toast.LENGTH_SHORT).show(); c.直接绑定到标签利用布局文件中的onClick属性xml布局文件中添加组件,设置onClick属性;Java代码中实现与onClick属性值同名的方法名。d.Activiry作为事件监听器。整个Activity实现onClickListener接口,适用于控件量多的情况。xml布局文件中添加组件,设置组件id;Activity实现onClickListener接口,即实

31、现onClick方法,完成各组件的功能。在onCreate()中绑定控件与事件监听器:findViewById(R.id.Button03).setOnClickListener(this);在onCreate()方法外重写Overridepublic void onClick(View arg0) if(arg0.getId()=R.id.button)System.out.println(click Button.); 12理解TabHost, TabSpec, TabWidget等基本类的用法。TabHost组件可以在界面中存放多个选项卡,必须有TabWidget与FrameLayout

32、组件TabHost组件中必备的两个组件TabWidget: 该组件就是TabHost标签页中上部 或者 下部的按钮, 可以点击按钮切换选项卡;直接在tabhost中加不加,即使add了选项卡,也无法区分开选项卡TabSpec: 代表了选项卡界面, 添加一个TabSpec即可添加到TabHost中,每一页是内容+标签,内容由FrameLayout显示定义布局: 在XML文件中使用TabHost组件, 并在其中定义一个FrameLayout选项卡内容;b.继承TabActivity: 显示选项卡组件的Activity继承TabActivity;c.获取组件: 通过调用getTabHost()方法,

33、 获取TabHost对象;d.创建添加选项卡: 通过TabHost创建添加选项卡;TabHost tabs = (TabHost) findViewById(R.id.tabhost);tabs.setup();TabHost.TabSpec spec = tabs.newTabSpec(tag1);spec.setContent(R.id.tab1);spec.setIndicator(Clock);tabs.addTab(spec);其中tabs.newTabSpec(tag1)用来new一个tab,同时标记这个tab的tagsetContent()用来处理点击这个tab后的动作,可以是这

34、个Activity下的一个组件,如setContent(R.id.tab1)布局文件,也可以是一个intent,比如:setContent(new Intent(this, SubTab.class)setIndicator()用来标记这个tab的名字,可以是setIndicator(Clock),也可以包含其他的属性,如图片:setIndicator(商场,getResources().getDrawable(android.R.drawable.arrow_down_float)tabs.addTab(spec)将这个tab添加如TabHost13 理解AsyncTask在Android耗

35、时操作中的使用方法。AysncTask是谷歌封装的实现异步操作,用于执行耗时任务并在UI线程中更新结果的抽象类。背后的实现原理就是异步消息机制(Handler)AsyncTask是一个轻量级异步类,用户可以直接继承AsyncTask,在类中实现一步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程。使用方法:继承AsyncTask并且制定传入参数类型、描述过程类型以及返回值类型,这些类型均是泛型需要重写的4个方法:onPreExecute():这个方法是在异步加载进行前执行的,用于界面上的初始化操作,必须现实一个进度条对话框。doInBack

36、ground(Params.):只有这个方法是在子线程中进行的,所有下载或者加载等耗时的操作,都可以在这里执行。任务一旦完成,就可以通过return语句将任务的执行结果返回。如果AsyncTask的第三个泛型参数指定的是void,就可以不用返回。更新UI操作,需要调用publishProgress(传递的参数)方法来完成。onProgressUpdate(接收的参数):这个方法是在doInBackground方法中执行了publishProgress()方法的时候执行,publishProgress()方法是向此方法传递一些用于描述过程的参数,比如用Integer来描述下载的进度等,实现对UI

37、进行操作。onPostExecute(Result):这个方法是在doInBackground()方法执行完毕return之后执行,根据return的result类型来判断进行一些UI操作。比如提醒任务结果,关掉进度条对话框等以上的方法中,只有doInBackground()这个方法是在子线程中执行,其他都是在UI线程,所以可以直接对UI进行更新。New DownloadTask().execte();启动这个任务 / 这里定义的一个AsyncTask子类,输入参数类型为空,过程指示参数为整型,异步返回类型为布尔28 class DownLoad extends AsyncTask Async

38、task的不足之处: 1.AsyncTask可能存在新开大量线程消耗系统资源和导致应用FC的风险 2.AsyncTask一旦执行了 doInBackground,就算调用取消方法,也会将 doInBackground里面的代码执行完毕,才会停止。 3.调用了AsyncTask#execute()后,AsyncTask会把任务交给线程池,由线程池来管理创建运行线程。线程池不经维护,当大量异步发生时,导致线程池满了,会出异常。14 理解Android客户端程序与后端Web服务器应用程序之间的通信流程。客户端向服务器发送一条HTTP请求,服务器接收到请求后会返回数据给客户端,然后客户端对数据进行解析

39、。请求方式 HttpURLConnection和HttpClient,但后者被弃用在6.0后。但请求数据是在子线程中,而数据更新是在UI主线程中必须在主线程中开启一个线程,并且使用Handler这个对象来实现数据的异步请求.然后当请求响应完成之后才会在界面中更新数据。1. 手机客户端向Web应用服务器发送请求信息1) 首先引用所需要的各种API,比如http,io等2) 定义访问网站的URL(3)创建HttpURLConnection对象,该对象的主要作用是将Android手机端的数据提交给Web应用服务器3) 设置数据编码方式Android手机在将准备好的数据发送到Web服务器之前,需要对数

40、据的编码进行规定,这样服务器在接收到这些数据后,就会根据发送过去的文字编码处理和显示。4) 提交HttpURLConnection对象和获取服务器HttpResponse响应数据完成前面的工作,就该将数据提交给Web应用服务器了,在应用服务接收Android手机提交的数据后,经过处理,将要返回(响应)给Android手机的数据打包到一个HttpResponse对象中,发回给手机。2. 手机客户端接受响应数据获取响应服务的数据从Web服务器响应到手机终端的数据一般打包在一个字节数组中,关键是这个字节数组中可能包含了各种不同的数据类型,为此,需要采取Java数据流和过滤流的方法从字节数据中取出各种

41、类型的数据15 理解MessageQueue的工作原理。是消息队列的意思,存放所有通过Handler发送的消息。这部分消息会一直存在消息对列中,等待被处理,每个线程只有一个MessageQueue对象MessageQueue是比较低层的类,是持有Message(在Looper中派发)的一个链表,但Message不是直接添加到MessageQueue中的,而是通过与Looper相关联的Handler来进行的。在当前线程中可以通过调用Looper.myQueue()方法来获取当前线程的MessageQueueMessageQueue,主要包含2个操作:插入和读取。读取操作会伴随着删除操作,插入和读

42、取对应的方法分别为enqueueMessage和next,其中enqueueMessage的作用是往消息队列中插入一条消息,而next的作用是从消息队列中取出一条消息并将其从消息队列中移除。虽然MessageQueue叫消息队列,但是它的内部实现并不是用的队列,实际上它是通过一个单链表的数据结构来维护消息列表,单链表在插入和删除上比较有优势。Message: 是线程之间传递的消息,在内部携带少量信息,用于不同线程间交换数据。what,arg1,arg2,obj携带Object对象Handler:处理者的意思,主要用于发送和处理消息,Handler类的作用主要有两种:1.在新启动的线程中发送消息

43、。sendMessage().2.在主线程(UI线程)中获取,处理消息。handleMessage()方法Looper是每个线程中MessageQueue的管家,调用Looper的loop()方法,就会进入一个无限循环中,然后每当MessageQueue存在一条消息,就会将他取出,并传递到Handler的handleMessage()方法。每个线程也只会有一个Looper对象异步消息的处理机制:(1) 主线程创建Handler对象,并重写handleMessage()方法。(2) 当子线程需要进行UI操作,就创建一个Message对象,并通过Handler把这条消息发送出去。之后,这条消息会被

44、添加到MessageQueue中等待被处理。(3) 而Looper一直尝试从MessageQueue中取出待处理的消息,如果有,就分发到Handler的handleMessage()方法处理。由于Handler对象是在主线程创建,所以可以更新UI(4)Looper是每个线程中MessageQueue的管家,在loop()方法被调用后就会处于无限循环中,每当发现队列中有一个消息,就会取出,放进handleMessage()方法中处理16 理解SharedPreferences的使用方法。SharedPreferences是Android平台上一个轻量级的存储类,以键值对形式来保存应用的一些常用配

45、置。它是使用键值对的方式存储数据。存入什么类型,读取出来就是什么类型1得到SharedPreferences对象2、调用SharedPreferences对象的edit()方法来获取一个SharedPreferences.Editor对象。3、向SharedPreferences.Editor对象中添加数据。4、调用commit方法将添加的数据提交。Context.getSharedPreferences(文件名称,操作模式)文件名称不存在就会创建一个,操作模式有两种:MODE_PRIVATE:默认操作模式,直接在把第二个参数写0就是默认使用这种操作模式,这种模式表示只有当前的应用程序才可以对当前这个SharedPreferences文件进行读写。MODE_MULTI_PRIVATE:用于多个进程共同操作一个SharedPreferences文件。注:MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE这两种模式已经在android 4.2版本以后废弃了。方法2:Activity.getPreferences(文件名,操作模式)使用这个方法会自动将当前活

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论