文档详情

考试知识点Android闭卷考试

馨***
实名认证
店铺
DOC
70KB
约15页
文档ID:156472072
考试知识点Android闭卷考试_第1页
1/15

...wd...考试知识点〔Android闭卷考试〕1. 理解Android常见的几种布局几种布局的高和宽,制定LinearLayout,线性布局,布局中的控件性方向上依次排列默认控件水平方向排列android:orientation=〞horizontal〞android:orientation=〞vertical〞注意:当是水平方向排列,控件宽度不能设置为android:layout_width="match_parent"否则控件会把水平方向沾满,其他控件无法会控件覆盖〔无法放置〕当是垂直方向,内部控件不能将android:layout_height="match_parent"指定为match_parent android:layout_weight="1",使用比例方式来指定控件的大小RelativeLayout,相对布局,是通过相对定位的方式让布局中控件可以出现在布局的任何位置内部控件,三种属性, 属性值是true或falseandroid:layout_centerHrizontal 水平居中,属性值是〞@id/*“android:layout_below 在某元素的下方属性值是数值android:layout_marginLeft 离某元素左边缘的距离FrameLayout,帧布局,简单,应用场景少,和碎片一起使用,没有定位方式,所有控件默认在布局的左上角,后面的会覆盖前面的。

每一个组件都代表一个画面用该布局可以实现动画效果PercentFrame〔Relative)Layout 百分比布局:布局中可以不用wrap_content,match_parent等方式来指定控件的大小,直接指定控件所占的百分比,实现平分布局甚至任意比例分割布局注意百分比布局需要添加库依赖 support:percent:24..由于LinearLayout本身支持按比例指定控件大小,所以百分比布只为RelativeLayout和RelativeLayout功能扩展表格布局〔Tablelayout〕采用行列的形式管理UI组件,无需明确地声明它的行列数, 而是通过添加TableRow、其他组件来控制表格的行数和列数GridLayout是Android4.0之后新增的布局管理器,因此正常情况下需要在 Android 4.0 之后的版本中才能使用,如果希望在更早的版本中使用的话,需要导入相应的支撑库〔v7包的gridlayout包〕Grid Layout 网格布局,和前面所讲的 Table Layout(表格布局) 有点类似,不过他有很多前者没有的东西,因此也更加好用:- 可以自己设置布局中组件的排列方式- 可以自定义网格布局有多少行、列- 可以直接设置组件位于某行某列- 可以设置组件横跨几行或者几列Absolute Layout 它不提供任何布局控制,而是由开发人员自己通过X、Y坐标来控制组件的位置。

运行Android应用的往往千差万别,屏幕大小、分别率、屏幕密度等都可能存在较大的差异,使用绝对布局的话很难做机型适配--已经被废弃2. 理解Android应用程序开发过程中,常见的四种设计模式及各自的使用场合ListView-Adapter、Builder-Dialog、Factory-选项卡、Listener-事件监听1适配器模式:简介:将一个类的接口转换成客户希望的另外一个接口,从而使原本因接口不匹配而无法再一起工作的两个类能够在一起工作不同的数据提供者使用一个适配器来向一个一样的客户提供服务举例:ListView或GridView的Adapter2建造者模式:简介:将一个复杂对象的构建与它的表示别离,使得同样的构建过程可以创立不同的显示,但其 根本还是不变举例:AlertDialog.Builder.AlertDialog.Builder, 使用该Builder来构建复杂的AlertDialog对象工厂模式:定义一个用于创立对象的接口,让子类决定将哪一个类实例化外部不需要关心工厂是如何创立一个复杂产品的过程例如:BitmapFactory位图工厂,专门用来将指定的图片转换为指定的位图Bitmap。

监听器模式事件源经过事件的封装传给监听器,当事件源触发事件后,监听器接收到事件对象可以回调事件的方法.Listener-事件监听观察者模式:定义对象间是一〔Subject〕对多〔Observer〕的依赖关系,当一个对象发生变化时,其它依赖该对象的对象都会收到通知,并随着变化播送机制就是观察者模式ListView和BaseAdapter组合时,当BaseAdapter的item改变时,我们经常会调用notifyDataSetChanged(),通知Listview刷新3. Android中可支持网页的缩放的视图(View)及其功能在Android系统中,内置了一款高性能的浏览器,其内核就是WebKit,WebView网页视图,就是在这个根基上封装的一个控件,我们可以直接用这个控件在应用程序内去显示Web页面,直接用HTML文件做为布局文件,可以和JavaScript交互调用显示和渲染web页面(1) .直接显示网页 设置在当前应用中翻开网页,如果不设置的话会使用浏览器翻开网页 mWebView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { view.loadUrl(" s:// baidu /"); return true; } }); mWebView.loadUrl(" s:// baidu /");(2) 和js交互设置支持JavascriptWebSettings settings = webView.getSettings();settings.setJavaScriptEnabled(true);(3) 可以利用html做界面布局4. 理解View和ViewGroup的用途及两者之间的关系。

继承构造:View是ViewGroup的父类类View是所有UI组件的基类,而 ViewGroup是容纳这些组件的容器,其本身也是从View派生出来的.View中所有的子类成为widgets,viewgroup的子类成为layoutView和ViewGroup之间采用了组合设计模式,可以使得“局部-整体〞同等对待ViewGroup作为布局容器类的最上层,布局容器里面又可以有View和ViewGroup 对于setContentView(R.layout.layout的xml文件)方法,Activity其实不是显示视图〔直观上感觉是它〕,实际上Activity调用了PhoneWindow的setContentView()方法,然后加载视图,将视图放到这个Window上,而Activity其实构造的时候初始化的是Window〔PhoneWindow〕,Activity其实是个控制单元,即可视的人机交互界面Activity是一个工人,它来控制Window;Window是一面显示屏,用来显示信息;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,SAX和Dom方式解析Json用JSONObject和GSON解析Protocol Buffers一种数据描述语言,类似于XML能够将构造化数据序列化——类似于XML,但更小,更快,更简单经常用到json、xml等格式的数据,这些数据在传输前可以进展压缩,这时候就会涉及到一种压缩格式—GzipGzip的压缩比率非常大,有的甚至能到达70%以上,可以大大减少传输内容,提高用户的传输速度,进而提高用户的体验6. 理解 根本组件Activity的相关知识(如重载方法等)Android应用有四大组件Activity、Service、BroadcastReceiver、ContentProviderContentProvider组件:用于Android应用之间实现实时的数据交换。

常和ContentResolver一起使用BroadcastReceiver组件:播送消息接收器,类似于事件编程中的监听器,但是不同的是普通的事件监听器监听的事件源是程序中的对象,而BroadcastReceiver监听的事件源是Android应用程序中的其它组件Service组件: 通常位于后台运行,一般不需要与用户交互,所以没有图形界面Service组件运行起来后会有独立的生命周期,它通常用于为其他组件提供后台服务或监控其他组件的运行状态(1) activity是一种可以包含用户界面的组件,主要用于和用户进展交互表现形式是一个屏幕,功能是显示界面,消息传递整个生命周期:onCreate()-onDestroy()可见的生命周期:onStart()-onStop()前台的生命周期:onResume()-onPause()运行,暂停〔不在栈顶,但可见〕,停顿〔完全不可见,有可能因内存不够被回收〕,销毁〔从栈中移除覆盖了activity生命周期的每一个环节onCreate():当activity是被创立时候,会自动运行该方法该方法做一些初始化动作,比方加载布局,绑定时间等onStart():活动在有不可见变为可见的时候调用。

onResume():当activity开场与用户交互〔获得焦点〕时,会调用onResume,此是活动一定位于返回栈的栈顶,并处于运行状态onPause():当系统准备启动或恢复另一个活动时调用此时活动处于暂停状态〔当一个活动不再处于栈顶的位置,但仍然可见,弹出一个对话框或者一个不能占满屏幕的活动都会导致前一个活动处于暂停状态〕通常会在这个方法中释放掉一些占用cpu的资源onStop():当这个activity完全看不见的时候,会调用onStop方法以下三种情况都会使这个activity调用onStop()方法,第一种是一个新的activity被执行,第二种是一个已经存在的activity被切换到最前端,第三种是这个activity要被销毁 onRestart():把activity从停顿状态变为运行状态,活动被重新启用onDestroy():当activity销毁前会调用该方法,之后变为销毁状态理解何时需要在Activity中重写方法onActivityResult当使用startActivityForResult()〔在第一个活动中〕方法启动另一个Activity时,需要在第一个活动中重写onActivityResult()方法,获得被启动Activity返回的结果。

Intent intent=new Intent(this,secondeActivity.class);startActivityForResult(intent,int 请求码);重写 @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 linjiqin"); //设置返回数据 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);承受数据:Person p2=getIntent().getSerializableExtra(“名字〕;Parcelable,同样需要类继承Parcelable接口,但需要在person类中重写接口中两个方法,必须有一个实现了Parcelable.Creator接口的静态常量成员字段承受数据方法getIntent.getParcelableExtra(“名字〕;CharSequence、CharSequence接口,实现了这个接口的类有:CharBuffer、String、StringBuffer、StringBuilder这个四个类所以处理String或者StringBuffer的类就不用重载Bundle:一种存放字符串和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里面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下拉列表框· DatePicker日期选择组件· TimePicker事件选择组件· NumberPicker数值选择组件9.理解Android工程中哪些目录中的文件是由Eclipse自动编译生成。

src、存放的是该工程的源代码bin、编译后自动生成目录二进制文件,包括class、资源文件、dex、apk等gen、自动生成的文件目录该目录下的文件全部都是ADT自动生成的,一般并不需要去修改,实际上该目录下只定义了一个R.java文件,该文件相当于工程的字典,为工程中用户界面、字符串、图片等资源都会在该类中创立其惟一的IDres存放应用程序中经常使用的资源文件等9. 理解SQLite的一般用法SQLite是一款轻量级关系型数据库安卓内置SQLiteSQLiteOpenHelper: SQLiteOpenHelper是是一个辅助类这个类主要生成一个数据库,并对数据库的版本进展管理当在程序当中调用这个类的方法getWritableDatabase()或者 getReadableDatabase()方法的时候,创立或翻开一个现有的数据库,并返回一个SQLiteDatabase对象用于对数据库进展读写操作当数据库不可写入〔磁盘已满〕,getReadabelDatabase()返回的对象将以只读的方式翻开数据库,getReadableDatabase()出现异常构造方法:public MyDatagbaseHelper(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方法)的时候会调用这个方法,也就是说,只有在创立数据库的时候才会调用,当然也有一些其它的情况,一般我们在这个方法里边生成数据库表。

2.onUpgrade〔SQLiteDatabase,int,int〕当数据库需要升级〔修改表,创立新表,数据备份,删除表〕的时候,Android系统会调用这个方法比方增加一张表这里要db.execSQL(sql语句〕如果是建的表已经存在,就要先删除,或不建3.onOpen〔SQLiteDatabase〕非抽象:当翻开数据库时的回调函数SQLiteDatabase sqlitedatabase=sqliteDBHelper.getWritableDatabase()插入操作 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 + "=?", new String[]{String.valueOf(person.getId())});第三个和第4个参数不指定,默认更新所有行删除sqliteDataBase.delete(TABLE_NAME, COLUMN_ID + "=?", new String[]{String.valueOf(id)});,后面的两个参数不指定的话默认删除所有行或者直接用sql来操作sqliteDataBase.execSQL〔sql语句,new String[]{参数...});11. 理解正确设置onClickListener所需要的几个 根本步骤。

View.OnClickListener:单击事件的监听器必须实现的接口基于监听的事件处理模型:· 获取普通界面组件〔事件源〕,也就是被监听的对象· 实现事件监听器类,该监听器类是一个特殊的Java类,必须实现一个OnClickListener接口· 调用事件源的setOnClickListener()方法注册事件监听器常见的实现方法:a.匿名内部类xml布局文件中添加组件,设置组件id;在activity中获取对应id的组件,用setOnClickListener〔new OnClickListener〔〕{……}〕的方式绑定控件与事件监听器,在内部类中重载onClick()方法,实现想要的功能a的优化方案:使用内部类,还有外部类,但很少用在Activity中定义一个内部类继承监听器接口,或new一个该监听器的对象setOnClickListener(对象实例)xml布局文件中添加组件,设置组件id;在activity中编写内部类实现OnClickListener,实现onClick〔〕方法绑定按钮与事件监听器:button.setOnClickListener(内部类的对象);btnshow.setOnClickListener(new BtnClickListener()); } //定义一个内部类,实现View.OnClickListener接口,并重写onClick()方法 class BtnClickListener implements View.OnClickListener { @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接口,即实现onClick方法,完成各组件的功能在onCreate〔〕中绑定控件与事件监听器:findViewById(R.id.Button03).setOnClickListener(this);在onCreate()方法外重写@Overridepublicvoid onClick(View arg0) {if(arg0.getId()==R.id.button) { System.out.println("click Button....."); } } 12.理解TabHost, TabSpec, TabWidget等 根本类的用法TabHost组件可以在界面中存放多个选项卡,必须有TabWidget与FrameLayout组件TabHost组件中必备的两个组件TabWidget: 该组件就是TabHost标签页中上部 或者 下部的按钮, 可以点击按钮切换选项卡;直接在tabhost中加不加,即使add了选项卡,也无法区分开选项卡TabSpec: 代表了选项卡界面, 添加一个TabSpec即可添加到TabHost中,每一页是内容+标签,内容由FrameLayout显示定义布局: 在XML文件中使用TabHost组件, 并在其中定义一个FrameLayout选项卡内容;b.继承TabActivity: 显示选项卡组件的Activity继承TabActivity;c.获取组件: 通过调用getTabHost()方法, 获取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后的动作,可以是这个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耗时操作中的使用方法。

AysncTask是谷歌封装的实现异步操作,用于执行耗时任务并在UI线程中更新结果的抽象类背后的实现原理就是异步消息机制〔Handler)AsyncTask是一个轻量级异步类,用户可以直接继承AsyncTask,在类中实现一步操作,并提供接口反响当前异步执行的程度〔可以通过接口实现UI进度更新〕,最后反响执行的结果给UI主线程使用方法:继承AsyncTask并且制定传入参数类型、描述过程类型以及返回值类型,这些类型均是泛型需要重写的4个方法:onPreExecute():这个方法是在异步加载进展前执行的,用于界面上的初始化操作,必须现实一个进度条对话框doInBackground(Params...):只有这个方法是在子线程中进展的,所有下载或者加载等耗时的操作,都可以在这里执行任务一旦完成,就可以通过return语句将任务的执行结果返回如果AsyncTask的第三个泛型参数指定的是void,就可以不用返回更新UI操作,需要调用publishProgress(传递的参数〕方法来完成onProgressUpdate(接收的参数):这个方法是在doInBackground方法中执行了publishProgress()方法的时候执行,publishProgress()方法是向此方法传递一些用于描述过程的参数,比方用Integer来描述下载的进度等,实现对UI进展操作。

onPostExecute(Result):这个方法是在doInBackground()方法执行完毕return之后执行,根据return的result类型来判断进展一些UI操作比方提醒任务结果,关掉进度条对话框等以上的方法中,只有doInBackground()这个方法是在子线程中执行,其他都是在UI线程,所以可以直接对UI进展更新New DownloadTask().execte();启动这个任务// 这里定义的一个AsyncTask子类,输入参数类型为空,过程指示参数为整型,异步返回类型为布尔28class DownLoad extends AsyncTask {Asynctask的缺乏之处: 1.AsyncTask可能存在新开大量线程消耗系统资源和导致应用FC的风险 2.AsyncTask一旦执行了 doInBackground,就算调用取消方法,也会将doInBackground里面的代码执行完毕,才会停顿3.调用了AsyncTask#execute()后,AsyncTask会把任务交给线程池,由线程池来管理创立运行线程线程池不经维护,当大量异步发生时,导致线程池满了,会出异常。

14. 理解Android客户端程序与后端Web服务器应用程序之间的通信流程客户端向服务器发送一条 请求,服务器接收到请求后会返回数据给客户端,然后客户端对数据进展解析请求方式 URLConnection和 Client,但后者被弃用在6.0后但请求数据是在子线程中,而数据更新是在UI主线程中必须在主线程中开启一个线程,并且使用Handler这个对象来实现数据的异步请求.然后当请求响应完成之后才会在界面中更新数据1. 客户端向Web应用服务器发送请求信息1) 首先引用所需要的各种API,比方 ,io等2) 定义访问网站的URL〔3〕创立URLConnection对象,该对象的主要作用是将Android端的数据提交给Web应用服务器3) 设置数据编码方式Android在将准备好的数据发送到Web服务器之前,需要对数据的编码进展规定,这样服务器在接收到这些数据后,就会根据发送过去的文字编码处理和显示4) 提交URLConnection对象和获取服务器 Response响应数据完成前面的工作,就该将数据提交给Web应用服务器了,在应用服务接收Android提交的数据后,经过处理,将要返回(响应)给Android的数据打包到一个 Response对象中,发回给。

2. 客户端承受响应数据获取响应服务的数据从Web服务器响应到终端的数据一般打包在一个字节数组中,关键是这个字节数组中可能包含了各种不同的数据类型,为此,需要采取Java数据流和过滤流的方法从字节数据中取出各种类型的数据15. 理解MessageQueue的工作原理是消息队列的意思,存放所有通过Handler发送的消息这局部消息会一直存在消息对列中,等待被处理,每个线程只有一个MessageQueue对象MessageQueue是比拟低层的类,是持有Message〔在Looper中派发〕的一个链表,但Message不是直接添加到MessageQueue中的,而是通过与Looper相关联的Handler来进展的在当前线程中可以通过调用Looper.myQueue()方法来获取当前线程的MessageQueueMessageQueue,主要包含2个操作:插入和读取读取操作会伴随着删除操作,插入和读取对应的方法分别为enqueueMessage和next,其中enqueueMessage的作用是往消息队列中插入一条消息,而next的作用是从消息队列中取出一条消息并将其从消息队列中移除虽然MessageQueue叫消息队列,但是它的内部实现并不是用的队列,实际上它是通过一个单链表的数据构造来维护消息列表,单链表在插入和删除上比拟有优势。

Message: 是线程之间传递的消息,在内部携带少量信息,用于不同线程间交换数据what,arg1,arg2,obj携带Object对象Handler:处理者的意思,主要用于发送和处理消息,Handler类的作用主要有两种:1.在新启动的线程中发送消息sendMessage().2.在主线程〔UI线程〕中获取,处理消息handleMessage()方法Looper是每个线程中MessageQueue的管家,调用Looper的loop〔〕方法,就会进入一个无限循环中,然后每当MessageQueue存在一条消息,就会将他取出,并传递到Handler的handleMessage()方法每个线程也只会有一个Looper对象异步消息的处理机制:(1) 主线程创立Handler对象,并重写handleMessage()方法2) 当子线程需要进展UI操作,就创立一个Message对象,并通过Handler把这条消息发送出去之后,这条消息会被添加到MessageQueue中等待被处理3) 而Looper一直尝试从MessageQueue中取出待处理的消息,如果有,就分发到Handler的handleMessage()方法处理。

由于Handler对象是在主线程创立,所以可以更新UILooper是每个线程中MessageQueue的管家,在loop()方法被调用后就会处于无限循环中,每当发现队列中有一个消息,就会取出,放进handleMessage()方法中处理16. 理解SharedPreferences的使用方法SharedPreferences是Android平台上一个轻量级的存储类,以键值对形式来保存应用的一些常用配置它是使用键值对的方式存储数据存入什么类型,读取出来就是什么类型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(文件名,操作模式)使用这个方法会自动将当前活动的类名作为SharedPreferences的文件名,底层调用的是下面这个方法Activity.getSharedPreferences〔String name, int mode〕我们也可以直接调用getSharedPreferences这个方法,传入自定义的名字方法3PreferenceManager.getDefaultSharedPreferences(Context)使用这个方法会自动使用当前程序的包名作为前缀来命名SharedPreferences文件 调用SharedPreferences对象的edit()方法来获取一个SharedPreferences.Editor对象SharedPreferences.Editor editor = getSharedPreferences(“data〞,MODE_PRIVATE).edit();向SharedPreferences.Editor对象中添加数据。

editor.putString(“name〞,〞Lily〞); //以键值对形式存储editor.putInt(“age〞,〞20〞); //以键值对形式存储editor.putBoolean(“married〞,false); //以键值对形式存储4、调用commit方法将添加的数据提交editor mit();〔apply()方法也行Commit立即写入两者区别:apply没有返回值而commit返回boolean说明修改是否提交成功 2. apply是将修改数据原子提交到内存, 而后异步真正提交到硬件磁盘, 而commit是同步的提交到硬件磁盘,因此,在多个并发的提交commit的时候,他们会等待正在处理的commit保存到磁盘后在操作,从而降低了效率而apply只是原子的提交到内容,后面有调用apply的函数的将会直接覆盖前面的内存数据,这样从一定程度上提高了很多效率3. apply方法不会提示任何失败的提示SharedPreferences取数据:SharedPreferences s=getSharedPreferences(“data〞,MODE_PRIVATE);S. getString(“键值名〞)等get方法;理解AndroidManifest.xml文件的作用,以及里面常见的配置项· AndroidManifest.xml文件:Android工程的系统清单文件配置Android应用的名称、图标、访问权限等属性,并且Activity、Service、ContentProvider、BroadcastReceiver四大组件都要在这里进展配置。

· 是应用的入口文件,应用清单文件,包含app运行的必要的组件,权限,以及一些相关信息这个清单就是把这些 根本信息提交给安卓系统,app才能运行Android应用程序在运行时,在需要跳转到、或者需要用到组件找不到时报错Application:一个AndroidManifest.xml中必须含有一个Application标签,这个标签声明了每一个应用程序的组件及其属性用于声明Instrumentation测试类来监控Android应用的行为并应用到相关的功能测试中列出应用程序必须链接的外部库Activity活动组件〔即界面控制器组件〕的声明标签Service服务组件的声明标签,用于定义与描述一个具体的Android服务Boardcast Receiver播送接收器组件的声明标签用于指定Android应用中所需要使用的SDK的版本 //ContentProvider是用来管理持久化数据并发布给其他应用程序使用的组件。

下载提示
相关文档
正为您匹配相似的精品文档