sqlite[转]Android 面试题(1)

上边说的是性质名称,具体有什么值是在android.R.style中可以看出,比如这多少个”@android:style/Theme.Dialog”
就对应于android.R.style.Theme_Dialog ,(’_’换成’.’
<–注意:这些是作品内容不是笑容)就足以用在描述文件中了,找找类定义和讲述文件中的对应关系就都晓得了。

其全路径是/data/data/Package Name/files/fileName 。注意下,那里的参数fileName不得以分包路径分割符(如”/”)。

onPause: 到这一步是可见但不可相互的,系统会终止动画 等消耗CPU 的事情
从上文的讲述已经知晓,应该在这里保留你的局部数量,因为那么些时候
你的次第的先行级降低,有可能被系统注销。在此间保留的数目,应该在

 

就成为半透明的,[友情提醒-.-]仿佛的这种activity的性能可以在android.R.styleable
类的AndroidManifestActivity
方法中看出,AndroidManifest.xml中保有因素的性质的牵线都得以参照这个类android.R.styleable

数码读取与写入的不二法门都至极简单,只是在写入的时候有点区别:先调用edit()使其处于编辑状态,然后才能修改数据,最终动用commit()提交修改的数码。

首先表明SharedPreferences存储格局,它是 Android提供的用来储存一些简练布置信息的一种体制,例如:登录用户的用户名与密码。

四:ContentProvider

1、ContentProvider简介

onDestroy:
这是activity被干掉前最后一个被调用方法了,可能是外面类调用finish方
法或者是系统为了节约空间将它暂时的干掉,可以用isFinishing()来判
断它,如若您有一个Progress Dialog在线程中转动,请在onDestroy里
把她cancel掉,不然等线程截至的时候,调用Dialog的cancel方法会抛
非凡的。

android:theme=”@android:style/Theme.Dialog”

onstop: 变得不可见
,被下一个activity覆盖了

实际上SharedPreferences是行使了XML格式将数据存储到装备中,在DDMS中的File Explorer中的/data/data/<package name>/shares_prefs下。

Uri代表了要操作的数码,Uri紧要含有了两有的音讯:1.内需操作的ContentProvider ,2.对ContentProvider中的什么数据举办操作,

2、Uri类简介

onCreate: 在这边创设界面
,做一些数码的起始化工作

void ReadSharedPreferences(){ String strName,strPassword; SharedPreferences user = getSharedPreferences(“user_info”,0); strName = user.getString(“NAME”,””); strPassword = user getString(“PASSWORD”,””); }

1.率先把您需要匹配Uri路径全部给登记上,如下: //常量UriMatcher.NO_MATCH表示不般配任何路径的再次来到码(-1)。 UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); //假如match()方法匹配content://com.changcheng.sqlite.provider.contactprovider /contact路径,重返匹配码为1 uriMatcher.addURI(“com.changcheng.sqlite.provider.contactprovider”, “contact”, 1);//添加需要匹配uri,倘若匹配就会再次来到匹配码 //假设match()方法匹配 content://com.changcheng.sqlite.provider.contactprovider/contact/230路子,重返匹配码为2 uriMatcher.addURI(“com.changcheng.sqlite.provider.contactprovider”, “contact/#”, 2);//#号为通配符 2.报了名完需要配合的Uri后,就能够使用uriMatcher.match(uri)方法对输入的Uri进行匹配,假如匹配就回到匹配码,匹配码是调用 addURI()方法传入的第多少个参数,假设匹配 content://com.changcheng.sqlite.provider.contactprovider/contact路径,再次回到的匹配码为1。 ? ContentUris:用于获取Uri路径前面的ID部分,它有六个相比实用的法子: ? withAppendedId(uri, id)用于为路径加上ID部分 ? parseId(uri)方法用于从路径中拿走ID部分 ? ContentResolver:当外部应用需要对ContentProvider中的数据开展添加、删除、修改和查询操作时,可以运用 ContentResolver 类来成功,要拿到ContentResolver 对象,能够使用Activity提供的getContentResolver()方法。 ContentResolver使用insert、delete、update、query方法,来操作数据。

onResume: 变成和用户可互相的,(在activity 栈系统经过栈的艺术管理那个个
Activity的最下面,运行完弹出栈,则赶回上一个Activity)

2.    如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态? 当你的程序中某一个Activity A 在运行时中,主动或被动地运行另一个新的Activity B 
这个时候A会执行

public void onSaveInstanceState(Bundle outState) { 
super.onSaveInstanceState(outState); 
outState.putLong("id", 1234567890); 
} 

B 完成之后又会来找A,
那个时候就有二种处境,一种是A被回收,一种是绝非被回收,被回
收的A就要再度调用onCreate()方法,不同于间接开行的是这回onCreate()里是带上参数
savedInstanceState,没被注销的就依然onResume就好了。

当应用持续ContentProvider类,同等对待写该类用于提供数据和仓储数据的主意,就可以向任何应用共享其数据。即便拔取其他办法也可以对外共享数据,但数额访问形式会因数额存储的艺术而不同,如:选用文件模式对外共享数据,需要举行文件操作读写多少;采用sharedpreferences共享数据,需要接纳sharedpreferences API读写多少。而利用ContentProvider共享数据的便宜是统一了数额访问模式。?

就像官方的Notepad教程里的图景,你正在编纂某一个note,突然被搁浅,那么就把这一个note的id记住,再起来的时候就足以按照那些id去把万分note取出来,程序就完整一些。这也是看你的应用需不需要保存什么,比如您的界面就是读取一个列表,这就不需要特殊记住什么,哦,没准你需要记住滚动条的地点…

onStart: 到这一步变成用户可见不可互相的

文件存储模式是一种较常用的章程,在Android中读取/写入文件的措施,与 Java中贯彻I/O的先后是全然一样的,提供了openFileInput()和openFileOutput()方法来读取设备上的文件。 FilterInputStream, FilterOutputStream等得以到Java io package表明中去详细学习,不再此详细表明,具体实例如下: String fn = “moandroid.log”; FileInputStream fis = openFileInput(fn); FileOutputStream fos = openFileOutput(fn,Context.MODE_PRIVATE); 除此之外,Android还提供了其余函数来操作文件,详细表明请阅读Android SDK。

正文转自:http://www.cnblogs.com/mmll/archive/2011/05/03/2035041.html

以地方的数量存储结果为例,打开后方可见到一个user_info.xml的文本,打开后可以看看: <?xml version=”1.0″ encoding=”UTF-8″?> <map> <string name=”NAME”>moandroid</string> <string name=” PASSWORD”>SharedPreferences</string> </map>

应用这种措施,每个apk只能访问自己的/data/data/Package Name/files目录下的公文,

普普通通来说,那种措施转变的文本只好在这多少个apk内访问。但以此结论是指使用Context.openFileInput(String fileName)的艺术。

android:theme=”@android:style/Theme.Translucent”

使用SharedPreferences是有些限制的:只可以在同一个包内使用,不可以在不同的包里面采纳。

onResume里读出来,注意:这个方法里做的政工时刻要短,因为下一
个activity不会等到那个法子成功才开动

onPause,onstop, onDestroy,两种情况 下
activity都有可能被系统干掉
为了保险程序的不利,你要在onPause()里写上持久层操作的代码,将用户编辑的始末都保留到存储介质上(一般都是数据库)。实际工作中因为生命周期的变动而带来的题目也很多,比如你的应用程序起了新的线程在跑,这时候中断了,你还要去维护十分线程,是搁浅或者杀掉仍旧多少回滚,是啊?因为Activity可能被杀掉,所以线程中运用的变量和局部界面元素就相对要留心了,一般我都是接纳Android的信息机制
[Handler,Message]来拍卖多线程和界面交互的题材。这一个自己背后会讲一些,最近因为这么些东西头已经很大了,等我理清思绪再跟我们享用。

因为Uri代表了要操作的多少,所以大家很平日需要解析Uri,并从 Uri中获取数据。Android系统提供了四个用于操作Uri的工具类,分别为UriMatcher 和ContentUris 。领会它们的运用,会有益于我们的支付工作。 ? UriMatcher:用于匹配Uri,它的用法如下:

粗略你只需要安装
一下Activity的大旨就足以了在AndroidManifest.xml 中定义 Activity的
地点一句话:

一个Uri由以下几片段组成: 1.scheme:ContentProvider(内容提供者)的scheme已经由Android所规定为:content://。

4.    如何退出Activity 对于单一Activity的应用来说,退出很简单,直接finish()即可。
  当然,也可以用killProcess()和System.exit()这样的方法。

现提供几个方法,供参考:

  1、抛异常强制退出:
  该方法通过抛异常,使程序Force Close。
  验证可以,但是,需要解决的问题是,如何使程序结束掉,而不弹出Force Close的窗口。

  2、记录打开的Activity:
  每打开一个Activity,就记录下来。在需要退出时,关闭每一个Activity即可。

  3、发送特定广播:
  在需要结束应用时,发送一个特定的广播,每个Activity收到广播后,关闭即可。

  4、递归退出
  在打开新的Activity时使用startActivityForResult,然后自己加标志,在onActivityResult中处理,递归关闭。

  除了第一个,都是想办法把每一个Activity都结束掉,间接达到目的。
  但是这样做同样不完美。
  你会发现,如果自己的应用程序对每一个Activity都设置了nosensor,在两个Activity结束的间隙,sensor可能有效了。
  但至少,我们的目的达到了,而且没有影响用户使用。

  为了编程方便,最好定义一个Activity基类,处理这些共通问题。


5.请介绍下Android中常用的五种布局

   Android布局是应用界面开发的重要一环,在Android中,共有五种布局方式,分别是
FrameLayout(框架布局),LinearLayout  (线性布局),AbsoluteLayout(绝对布局),RelativeLayout(相对布局),TableLayout(表格布局)。

     一、FrameLayout

     这个布局可以看成是墙脚堆东西,有一个四方的矩形的左上角墙脚,我们放了第一个东西,要再放一个,那就在放在原来放的位置的上面,这样依次的放,会盖住原来的东西。这个布局比较简单,也只能放一点比较简单的东西。

     二、LinearLayout

       线性布局,这个东西,从外框上可以理解为一个div,他首先是一个一个从上往下罗列在屏幕上。每一个LinearLayout里面又可分为垂直布局 (android:orientation="vertical")和水平布局(android:orientation="horizontal"  )。当垂直布局时,每一行就只有一个元素,多个元素依次垂直往下;水平布局时,只有一行,每一个元素依次向右排列。

     linearLayout中有一个重要的属性 android:layout_weight="1",这个weight在垂直布局时,代表行距;水平的时候代表列宽;weight值越大就越大。

     三、AbsoluteLayout

      绝对布局犹如div指定了absolute属性,用X,Y坐标来指定元素的位置android:layout_x="20px"  android:layout_y="12px" 这种布局方式也比较简单,但是在垂直随便切换时,往往会出问题,而且多个元素的时候,计算比较麻烦。

     四、RelativeLayout

     相对布局可以理解为某一个元素为参照物,来定位的布局方式。主要属性有:

     相对于某一个元素

     android:layout_below="@id/aaa" 该元素在 id为aaa的下面

     android:layout_toLeftOf="@id/bbb" 改元素的左边是bbb

     相对于父元素的地方

     android:layout_alignParentLeft="true"  在父元素左对齐

     android:layout_alignParentRight="true" 在父元素右对齐

     还可以指定边距等,具体详见API

     五。TableLayout

     表格布局类似Html里面的Table。每一个TableLayout里面有表格行TableRow,TableRow里面可以具体定义每一个元素,设定他的对齐方式 android:gravity="" 。

     每一个布局都有自己适合的方式,另外,这五个布局元素可以相互嵌套应用,做出美观的界面。


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

savedInstanceState是一个Bundle对象,你基本上可以把她通晓为系统帮您维护的一个Map对象。在onCreate()里你可能会用到它,即便正常启动onCreate就不会有它,所以用的时候要一口咬定一下是不是为空。

if(savedInstanceState != null){ long id =
savedInstanceState.getLong(“id”);}

网络存储格局,需要与Android 网络数据包打交道,关于Android 网络数据包的详尽表达,请阅读Android SDK引用了Java SDK的哪些package?。

先 说下,Preference,File, DataBase这二种办法分别对应的目录是/data/data/Package Name/Shared_Pref, /data/data/Package Name/files, /data/data/Package Name/database 。

原因很粗略,参数fileName中不得以涵盖路径分割符,Android会自动在/data/data /Package Name/files目录下寻找文件名为fileName的公文。

void WriteSharedPreferences(String strName,String strPassword){ SharedPreferences user = getSharedPreferences(“user_info”,0); uer.edit(); user.putString(“NAME”, strName); user.putString(“PASSWORD” ,strPassword); user.commit(); }

2.主机名(或Authority):用于唯一标识这么些ContentProvider,外部调用者可以依照这么些标识来找到它。

二:文件存储数据 

三:网络存储数据

如上5中蕴藏形式,在随后的付出过程中,按照设计目的、性能需求、空间需求等找到适合的多少存储形式。Android 中的数据存储都是个人的,其他应用程序都是无法访问的,除非通过ContentResolver获取其他程序共享的数量。接纳文件形式对外共享数据,需要开展文件操作读写多少;采纳sharedpreferences共享数据,需要运用sharedpreferences API读写多少。而采纳ContentProvider共享数据的补益是统一了多少访问情势。

8.如何启用Service(Service),咋样停用Service(Service)

Android中的服务和windows中的服务是相仿的东西,服务一般从不用户操作界面,它运行于系统中不易于被用户发现,可以应用它开发如监控之类的程序。服务的付出相比简单,如下:

第一步:继承Service类

public class SMSService
extends Service {

}

其次步:在AndroidManifest.xml文件中的<application>节点里对劳动举行部署:

<service
android:name=”.SMSService” />

 

劳务无法团结运行,需要通过调用Context.startService(Service)()或Context.bind瑟维斯(Service)(Service)()方法启动服务。这六个艺术都足以启动Service,可是它们的行使场地有所不同。使用start瑟维斯(Service)()方法启用服务,调用者与服务期间从未牵涉,即便调用者退出了,服务依旧运行。使用bindService()方法启用服务,调用者与劳动绑定在了一头,调用者一旦退出,服务也就截至,大有“不求同时生,必须同时死”的风味。

 

假使打算接纳Context.start瑟维斯(Service)()方法启动服务,在服务未被创立时,系统会先调用服务的onCreate()方法,接着调用onStart()方法。假使调用startService()方法前服务已经被创造,多次调用startService()方法并不会导致多次创制伏务,但会招致多次调用onStart()方法。接纳startService()方法启动的服务,只可以调用Context.stopService(Service)()方法截至劳动,服务截止时会调用onDestroy()方法。

 

假诺打算利用Context.bindService()方法启动服务,在劳动未被创设时,系统会先调用服务的onCreate()方法,接着调用onBind()方法。这几个时候调用者和劳务绑定在一齐,调用者退出了,系统就会先调用服务的onUnbind()方法,接着调用onDestroy()方法。如若调用bind瑟维斯(Service)()方法前服务一度被绑定,多次调用bind瑟维斯(Service)()方法并不会造成多次创办服务及绑定(也就是说onCreate()和onBind()方法并不会被反复调用)。要是调用者希望与正在绑定的劳动解除绑定,可以调用unbindService(Service)()方法,调用该情势也会导致系统调用服务的onUnbind()–>onDestroy()方法。
服务常用生命周期回调方法如下:

onCreate()该办法在服务被创制时调用,该措施只会被调用两回,无论调用多少次startService(Service)()或bindService(Service)()方法,服务也只被创制两回。

onDestroy()该措施在劳动被终止时调用。

 

与行使Context.start瑟维斯()方法启动服务有关的生命周期方法

onStart() 只有应用Context.startService(Service)()方法启动服务时才会回调该措施。该措施在劳务起初运行时被调用。多次调用start瑟维斯(Service)()方法即使不会频繁创办服务,但onStart() 方法会被反复调用。

 

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

onBind()只有选择Context.bind瑟维斯(Service)(Service)()方法启动服务时才会回调该方法。该方法在调用者与劳动绑定时被调用,当调用者与服务业已绑定,多次调用Context.bind瑟维斯(Service)(Service)()方法并不会促成该措施被一再调用。

onUnbind()只有利用Context.bind瑟维斯(Service)()方法启动服务时才会回调该形式。该形式在调用者与服务解除绑定时被调用

 

行使Context.start瑟维斯(Service)()方法启动服务的代码如下:

public class HelloActivity
extends Activity {

@Override

public void onCreate(Bundle
savedInstanceState) {

……

Button button =(Button)
this.findViewById(R.id.button);

button.setOnClickListener(new View.OnClickListener(){

public void onClick(View v)
{

Intent intent = new
Intent(HelloActivity.this, SMSService.class);

startService(intent);

}});

}

}

 

选用Context.
bindService()方法启动服务的代码如下:

public class HelloActivity
extends Activity {

ServiceConnection conn =
new ServiceConnection() {

public void
onServiceConnected(ComponentName name, IBinder service) {

}

public void
onServiceDisconnected(ComponentName name) {

}

};

@Override public void
onCreate(Bundle savedInstanceState) {

Button button =(Button)
this.findViewById(R.id.button);

button.setOnClickListener(new View.OnClickListener(){

public void onClick(View v)
{

Intent intent = new
Intent(HelloActivity.this, SMSService.class);

bindService(intent, conn,
Context.BIND_AUTO_CREATE);

//unbindService(Service)(conn);//解除绑定

}});

}

}

Android 提供了5种方法存储数据: –使用SharedPreferences存储数据; –文件存储数据; –SQLite数据库存储数据; –使用ContentProvider存储数据; –网络存储数据;

3.路径(path):可以用来表示我们要操作的数额,路径的构建应依照工作而定,如下: ? 要操作contact表中id为10的记录,可以构建这样的路径:/contact/10 ? 要操作contact表中id为10的记录的name字段, contact/10/name ? 要操作contact表中的所有记录,可以构建这样的门路:/contact? 要操作的数码不肯定来自数据库,也可以是文本等他存储形式,如下: 要操作xml文件中contact节点下的name节点,可以构建这样的不二法门:/contact/name 虽然要把一个字符串转换成Uri,可以使用Uri类中的parse()方法,如下: Uri uri = Uri.parse(“content://com.changcheng.provider.contactprovider/contact”) 3、UriMatcher、ContentUrist和ContentResolver简介

五:总计表明

Context.openFileOutput(String fileName, int mode)生成的文本自动储存在/data/data/Package Name/files目录下,

1.    请描述下Activity的生命周期。 
2.    如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态? 
3.    如何将一个Activity设置成窗口的样式。(Edited by Sodino) 
4.    如何退出Activity?如何安全退出已调用多个Activity的Application? 
5.    请介绍下Android中常用的五种布局。 
6.    请介绍下Android的数据存储方式。(Edited by Sodino) 
7.    请介绍下ContentProvider是如何实现数据共享的。(Edited by Sodino) 
8.    如何启用Service,如何停用Service。(Edited by Sodino) 
9.    注册广播有几种方式,这些方式有何优缺点?请谈谈Android引入广播机制的用意。 
10.    请解释下在单线程模型中Message、Handler、Message Queue、Looper之间的关系。 
11.    AIDL的全称是什么?如何工作?能处理哪些类型的数据? 
12.    请解释下Android程序运行时权限与文件系统权限的区别。(Edited by Sodino)
13.    系统上安装了多种浏览器,能否指定某浏览器访问指定页面?请说明原由。 
14.    有一个一维整型数组int[]data保存的是一张宽为width,高为height的图片像素值信息。
请写一个算法,将该图片所有的白色不透明(0xffffffff)像素点的透明度调整为50%。 

15.    你如何评价Android系统?优缺点。
 1.    请描述下Activity的生命周期
 http://weizhulin.blog.51cto.com/1556324/311495
详细介绍一下这几个方法中系统在做什么以及我们应该做什么:
3.    如何将一个Activity设置成窗口的样式

这就使你的应用程序变成对话框的格局弹出来了,或者

在Android中常见使用File存储格局是用 Context.openFileOutput(String fileName, int mode)和Context.openFileInput(String fileName)。

一:使用SharedPreferences存储数据

其接纳了Map数据结构来储存数据,以键值的法门存储,能够简单的读取与写入,具体实例如下:

网站地图xml地图