时不时谋面试题整理

转自

  1. 什么是Activity?

季不行组件有,一般的,一个用户交互界面对应一个activity

setContentView() ,//要显的布局

button.setOnclickLinstener{

}

, activity是Context的子类,同时落实了window.callback和keyevent.callback,
可以拍卖及窗体用户交互的事件.

自家开常用之的生FragmentActivitiy,ListActivity  , PreferenceActivity
,TabAcitivty等…

而界面有联合之特点仍然功效的时,还相会融洽定义一个BaseActivity.

速度对话框的显得与销毁

  1. 请求描述一下Activity 生命周期。

生命周期描述的是一个类
从创建(new出来)到去世(垃圾回收)的过程中会履行之方法..

当此进程中 会针对不同的生阶段会调用不同之方法

Activity从创制及销毁有多态,从平种状态到任何一样栽状态时会点燃相应的回调方法,这个回调方法包括:oncreate
ondestroy onstop onstart onresume onpause

实质上那个措施都是有限少对诺之,onCreate创制及onDestroy销毁;

onStart可见与onStop不可见;onResume可编辑(即焦点)与onPause;

随即6独主意是绝对应之,那么就是止剩下一个onRestart方法了,这一个法子以啊时调用呢?

答案就是是:在Activity被onStop后,不过没有叫onDestroy,在更启动此Activity时便调用onRestart(而不再调用onCreate)方法;

假定让onDestroy了,则是调动用onCreate方法。

末说和气种被之经验,比如说手机卫士每一回上某界面的早晚都要观望最新的多寡,这多少个刷新列表的操作
就放在onStart()的法门里面.这样保证每回用户观察底数都是时的.

多媒体播放,播放来电话. onStop() 录像, 视频声音设置也0 ,
记录视频播放的职 mediaplayer.pause();

onStart()按照保存之状态回升现场.mediaplayer.start();

以宣读文档的下 还发现 activity还有少数只方法onPostResume() 和
OnPostCreate()这半独生命周期的章程,然则开之时节没有以过.

  1. 星星独Activity之间跳转时必定会履行之凡啊几单道。

诚如景观比如说有点儿单activity,分别叫A,B,当于A里面激活B组件的时刻, A
会调用 onPause()方法,然后B 调用onCreate() ,onStart(), OnResume() ,

以此时节B覆盖了窗体, A会调用onStop()方法. 
假诺B呢是只透明底,或者是针对性话框的体, 就无会晤调用onStop()方法

  1. 横竖屏切换时Activity的生命周期。

夫生命周期跟清单文件里之部署起关联

1、不设置Activity的android:configChanges时,切屏会重新调用各样生命周期

默认首先销毁当前activity,然后再次加载

2、设置Activity的android:configChanges=”orientation|keyboardHidden|screenSize”时,切屏不谋面又调用各种生命周期,只会履行onConfigurationChanged方法

一日游支付被,屏幕的朝都是摹写好的.

  1. 哪将一个Activity设置成窗口的体裁。

可打定义一个activity的体

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

  1. 你后台的Activity被网
    回收怎么收拾?要是后台的Activity由于有因被网回收而了,如何当吃系统回收往日封存时状态?

除外以栈顶的activity,其他的activity都暴发或于内存不足的时吃系统回收,一个activity越处于栈底,被回收的可能性越来越大.

protectedvoidonSaveInstanceState(Bundle outState) {

super.onSaveInstanceState(outState);

outState.putLong(“id”,1234567890);

}

publicvoidonCreate(Bundle savedInstanceState) {

//判断savedInstanceState是不是空.

//倘使不为空就收获下

super.onCreate(savedInstanceState);

}

  1. 何以退出Activity?如何安全退出已调用多单Activity的Application?

退出activity直接调用 finish () 方法 . //用户点击back键
就是退出一个activity

退出activity会执行 onDestroy()方法 .

1、抛大强制退出:

欠措施通过抛大,使程序Force Close。

证实能够,可是,需要缓解之题目是,如何如程序结束掉,而未弹来Force
Close的窗口。

100/0

//安全了进程
android.os.Process.killProcess(android.os.Process.myPid());

2、记录打开的Activity:

每打开一个Activity,就记录下来。在用退出时,关闭每一个Activity即可。

Listlists ;在application全集的条件之中

lists =new ArrayList();

lists.add(this);

for(Activity activity: lists)

{

activity.finish();

}

ondestory

lists.remove(this);

3、发送特定广播:

当得收尾应用时,发送一个一定的播报,每个Activity收到广播后,关闭即可。

//给有activity注册接受接受广播的效能

registerReceiver(receiver,filter)

//假使过接受到的凡 关闭activity的播放 
就调用finish()方法将当前之activity finish()掉

4、递归退出

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

点是网上的部分举行法.

实质上 可以经过 intent的flag 来贯彻..
intent.setFlag(FLAG_ACTIVITY_CLEAR_TOP)激活一个新的activity,然后在初的activity的oncreate方法中
finish掉.

说道同样讲话你针对activity的理解

管方的几乎碰用自己之体验写出来

  1. service是否以main thread中实践,service里面是不是可以进行耗时的操作?

默认情况,假使没亮的指定service所运行的历程,
Service(Service)和activity是运作于现阶段app所于过程的main thread(UI主线程)里面

service里面未可以实施耗时的操作(网络要,拷贝数据库,大文件 )

于子线程中举行 new Thread(){}.start();

Thread.currentThread().getName();

奇情形 ,可以于清单文件配置 service 执行所于的过程
,让service在其余的经过被实践

  1. 片只Activity之间怎么传递数据?

主导数据列可以经过. Intent传递数据

extras.putDouble(key,value)

intent.putExtra(name,value)

//通过intentputExtra方法基本数据类且传送

intent.getStringExtra(“key”,”value”);

intent.getBooleanExtra(“key”,”value”)

Bundlebundle = new  Bundle();

bumdle.putShort(key,value);

intent.putExtras(bumdle);

intent.putExtras(bundle)

Application全局内部存放 对象
,自己去实现协调的application的是类似,基础类此外application ,
每个activity都可以抱到

叫对象实现 implementsSerializable接口把对象存放到文件上.

让类实现Serializable接口,然后可以因此ObjectOutputStream     
 //对象输出流

Filefile = new File(“c:\1.obj”);

FileOutputStreamfos  = new FileOutputStream(file);

ObjectOutputStreamoos = new ObjectOutputStream(fos);

Studentstu = new Student();

oos.writeObject(stu);

//从文本被拿对象读出来

ObjectInputStreamois = new ObjectInputStream(arg0);

Student stu1 = (Student) ois.readObject();

文件/网络

intent.setData(Uri)

Uri.fromFile();  //大图片的传递

  1. 怎么叫在开行一个Activity是就是开行一个service?

以activity的onCreate()方法中 startService(Service)();

  1. 以及一个主次,但不同的Activity是否好在不同之Task任务栈中?

Singleinstance  运行于此外的独的职责栈里面

如若说在激活一个新的activity时候, 给intent设置flag

Intent的flag添加FLAG_ACTIVITY_NEW_TASK

那多少个为激活的activity就碰面在新的task栈里面…

Intentintent = new Intent(A.this,B.class);

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

startActivity(intent);

  1. Activity怎么与service绑定,怎么当activity中启动自己相应的service?

startService()一旦为创造调用着无关   没法用service里面的方法

bindService ()把service与调用者绑定 ,假使调用者被销毁, service会销毁

bindService()大家可以行使service里面的法门

bindService().让activity可以访问到 service里面的法

构建一个intent对象,

Intentservice = new Intent(this,MyService.class);

经过bind瑟维斯(Service)(Service)的措施去启动一个劳动,

bindService(intent,new MyConn(), BIND_AUTO_CREATE);

ServiceConnection对象(重写onServiceConnected和OnServiceDisconnected方法)
和BIND_AUTO_CREATE.

privateclass myconn implements ServiceConnection

{

publicvoid onServiceConnected(ComponentName name, IBinder service) {

//TODO Auto-generated method stub

//可以透过IBinder的靶子 去下service里面的方法

}

publicvoid onServiceDisconnected(ComponentName name) {

//TODO Auto-generated method stub

}

}

  1. 14
    .什么是瑟维斯(Service)(Service)以及描述下她的生命周期。Service(Service)有什么启动方法,有啊分别,怎么样停用瑟维斯(Service)(Service)?

当瑟维斯(Service)(Service)的生命周期中,被回调的法比Activity少一些,只有onCreate,
onStart, onDestroy,

onBind和onUnbind。

一般说来爆发三三两两种植格局启动一个瑟维斯(Service),他们对Service生命周期的熏陶是勿雷同的。

1通过startService

Service(Service)会经历
onCreate到onStart,然后处于运行状态,stopService的时刻调用onDestroy方法。

一经是调用者自己平素退出而尚未调用stopService的语,瑟维斯(Service)(Service)会从来于后台运行。

2通过bindService

Service(Service)会运行onCreate,然后是调动用onBind,
这多少个时段调用者和Service(Service)绑定以同步。调用者退出了,Srevice就会晤调用onUnbind->onDestroyed方法。

所谓绑定在协同就是共存亡了。调用者也可经调用unbindService(Service)方法来终止服务,这时候Srevice就晤面调用onUnbind->onDestroyed方法。

消专注的是一旦就几乎单办法交织在合来说,会现出啊动静也?

一个标准化是Service的onCreate的艺术就会给调用一不良,就是若管多少次的start瑟维斯(Service)(Service)又bind瑟维斯(Service),Service(Service)只被创建同不善。

只要先是bind了,那么start的当儿尽管直接运行瑟维斯(Service)(Service)的onStart方法,假使先是start,那么bind的时就从来运行onBind方法。

假使service运行期间调用了bindService,这时候又调用stop瑟维斯(Service)(Service)的说话,service是休晤面调用onDestroy方法的,service就stop不丢了,只好调用Unbind瑟维斯(Service)(Service),
service就会给灭绝

万一一个service通过startService(Service) 被start之后,多次调用startService(Service)的言辞,service会多次调用onStart方法。多次调用stopService的讲话,service只汇合调用一蹩脚onDestroyed方法。

苟一个service通过bindService被start之后,多次调用bind瑟维斯(Service)(Service)的语,service只会调用一回于onBind方法。

勤调用unbindService(Service)的话会抛来大。

15.
毫不service,B页面为音乐播放,从A跳反至B,再回去,咋样如音乐继续播放?

是题目提问底慌山寨.默认不做其他处理,B里面的音乐都能播放.

逢问题,可以肆意应变,灵活发挥,多着想把细节,比如说这些开就足以这样说,说说而针对startActivityForResult的知情()

A开启B的时,用startActivityForResult()方法,
B再次来到的中校播放的状态音讯重临给A ,A继续播放音乐.

  1. 好家伙是IntentService?有啥地方长?

经常的service ,默认运行在ui main 主线程

Sdk给我们提供的有利的,带有异步处理的service类,

OnHandleIntent()处理耗时的操作

  1. 哎时使用Service?

startForeground(id,notification)

messenger

具有service的历程有比高之预先级

官方文档告诉大家,Android系统会尽力而为保障有service的历程运行,只要以拖欠service已经为启动(start)或者客户端连接(bindService)到其。当内存不足时,需要保持,拥有service的过程具有相比高的先期级。

1. 倘使service正在调用onCreate, 
onStartCommand或者onDestory方法,那么用于当前service的长河相当给前台进程以避免被killed。

2.
使手上service已经被启动(start),拥有它们的长河则相比较那一个用户可见的进程优先级低一些,可是比那几个不可见的长河又关键,这即代表service一般不会合被killed.

3. 一旦客户端就连续至service
(bind瑟维斯(Service)),那么具有瑟维斯(Service)的长河则兼具高的优先级,能够看service是可见的。

4. 设service可以用startForeground(int,
Notification)方法来用service设置为前台状态,那么网便觉着是针对用户可见的,并无会合当内存不足时killed。

如果起其余的用组件作为瑟维斯(Service)(Service),Activity等运行在平的历程遭到,那么以会见增多该过程的第一。

1.瑟维斯(Service)(Service)底特色可以吃他未来台一直运转,可以在service里面制造线程去得耗时的操作.

2.布罗德(Broad)castreceiver捕到手到一个事变后,可以自一个service来就一个耗时的操作.

3.远程之service假使被启动起来,可以叫多次bind,但非会合再次create. 
索爱手机X10i的人脸识其余service可以为图库使用,可以为录像机,照相机等次第使用.

  1. 央描述一下Intent 和 Intent Filter。

Android中经过 Intent对象来表示无异久音讯,一个 Intent
对象不仅带有有夫信息的目的地,还得分包音信之情节,那好于一封Email,其中不仅当包含收件地方,还能分包具体的始末。对于一个
Intent 对象,信息“目的地”是须的,而内容则是只是摘项。

通过Intent可以实现各样系统组件的调用与激活.

Intent filter:可以精晓为邮局或者是一个信纸的分拣系统…

此分拣系统经过3只参数来分辨

Action:动作    view

Data:数据uri   uri

Category :而外的叠加信

Action匹配

Action是一个用户定义的字符串,用于描述一个 Android应用程序组件,一个
Intent Filter 可以蕴涵多单 Action。在 AndroidManifest.xml 的 Activity
定义时得以于这 节点指定一个 Action 列表用于标示 Activity
所可以经受的“动作”,例如:

……

倘我们于启动一个Activity时行使这样的Intent对象:

Intent intent =new Intent();

intent.setAction(“cn.itcast.action”);

这就是说有的Action列表中含了“cn.itcast”的Activity都拿会配合成功。

Android预定义了同多重之Action分别代表一定的系列动作。这个Action通过常量的艺术定义在android.content.
Intent中,以“ACTION_”起始。我们能够当
Android提供的文档中找到其的事无巨细表达。

URI数据匹配

一个 Intent可以因而 URI 指点外部数据给目的组件。在 节点中,通过
节点匹配外部数据。

mimeType属性指定指点外部数据的数据类型,scheme指定协议,host、port、path
指定数量的职位、端口、和途径。如下:

android:host=”host”android:port=”port” android:path=”path”/>

电话的uri  tel: 12345

http://www.baidu.com

友善定义的uri itcast://cn.itcast/person/10

比方以 Intent Filter中指定了这一个性,那么单纯有所有的性能都配合成功时 URI
数据匹配才会中标。

Category类别匹配

节点受到可是看组件定义一个 Category序列列表,当 Intent
中含那么些列表的保有类型时 Category 体系匹配才会成。

默认是DEFAULT

  1. Intent传递数据时,可以传递哪些项目数据?

1.貌似的中央数据列  Intent .putextra()intent.getextra();

2.数据的uri, intent.setData() intent.getData();

  1. 说说Activity,Intent,瑟维斯(Service)是呀关系 。

麦当劳同麦当娜的关联是啊关联?

这种问题,就讲下activity,讲一下service,说一下通过intent去激活零部件,传递数据.

说好种中发出诸如此类一个网革新的效应,展现界面就用的activity,
后台有只service每隔半时都去顾下服务器获取更新的数据…

翻开服务用底凡intent来开启

  1. 央描述一下布罗德cast Receiver。

发出为数不少播接收者 ,系统现已实现了.

播音分点儿种 有序广播

无序广播

指定接收者的播放 .是勿可以吃拦住掉的

abortBroadcast();

用来吸纳系统的播音通告,系统会时有暴发很多sd卡挂载,手机再度开,广播通告,低电量,来电,来短信等….

手机卫士中从定义一个broadcast receiver

sms_received  

来得到短信来的广播,依照黑名单来判定是否拦截该少信.

画画板生成图后,发送一个sd挂载的通知,通告系统的gallery去取到新的图片.

Intent intent
=newIntent(Intent.ACTION_MEDIA_MOUNTED,Uri.parse(“file://”+Environment.getExternalStorageDirectory()));

sendBroadcast(intent);

  1. 每当manifest和代码中哪些注册与如若 用 broadcastreceiver 。

设置广播接收者的优先级,设置广播接受者的action名字 等…

详细展现工程代码.

  1. 央介绍下ContentProvider是哪些兑现多少共享的。

拿好的数量通过uri的款式共享出去

android系统下 不同程序 数据默认是休可以共享访问

欲去落实一个好像去继承ContentProvider

publicclass PersonContentProvider extends ContentProvider{

publicboolean onCreate(){

//..

}

query(Uri, String[], String, String[], String)

insert(Uri, ContentValues)

update(Uri, ContentValues, String, String[])

delete(Uri, String, String[])

}

  1. 求介绍下Android的数据存储方。

文件访问权限.  sdcard /

数据库 sqlite

SharedPreference  //shared_preps

网络  socket tcp udp , http httpurlconnection

  1. 为啥要为此ContentProvider?它与sql的落实达标发啊异样?

遮掩数据存储的细节,对用户透明,用户仅待关怀操作数据的uri就可了

不等app之间共享,操作数据

Sql也来增删改查的方法.

但contentprovider还可错过增删改查本地文件. xml文件之读取,更改,

纱数据读取更改

  1. 呼吁介绍下Android中常用之五种布局。

FrameLayout(帧布局),LinearLayout(线性布局),AbsoluteLayout(相对布局),RelativeLayout(相对布局),TableLayout(表格布局)

FrameLayout

从屏幕的左上角起始布局,叠加彰显, 实际用 播放器的中断按钮.

LinearLayout

线性布局,这一个东西,从外框上足清楚也一个div,他首先是一个一个自达到望生陈在屏幕上。每一个LinearLayout里面还要可分为垂直布局

(android:orientation=”vertical”)和水平布局(android:orientation=”horizontal”

)。当垂直布局时,每一样执行就是不过发一个元素,多独元素依次垂直于生;水平布局时,只生一行,每一个要素依次往左边排列。

AbsoluteLayout

决布局犹如div指定了absolute属性,用X,Y坐标来指定元素的地点android:layout_x=”20px”

android:layout_y=”12px”

qq斗地主 qq游戏大厅800*480 800*480.apk  fwvga  854*480

点名平板机型的打支付中时时用到相对布局  widget相对布局

指定机型的机械游戏开发机顶盒开发。. 2.3 3.0

1.界面搭架子任务管理器 gridview

2.手机 任务管理 listview

lephone

lepad

RelativeLayout

相对布局可以领会为某一个要素也参照物,来恒定的布局情势。紧要性能有:

相对于某个一个要素

android:layout_below=”@id/aaa”该因素于 id为aaa的底

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

对峙于父元素的地方

android:layout_alignParentLeft=”true”在父元素左对共同

android:layout_alignParentRight=”true”在父元素右对一头

TableLayout

报表布局类似Html里面的Table。每一个TableLayout里面有报表行TableRow,TableRow里面能够切实定义每一个元素,设定他的针对齐格局android:gravity=””

诸一个搭架子都发出温馨称的模式,另外,这五个布局元素得以相互嵌套应用,做出美观的界面。

oa自动化 生成报表 ,图标 表示

css div

webview

  1. 谈谈UI中, Padding和Margin有什么界别?

Padding文字对边框, margin是控件对父窗体.

  1. widget相对地方的完成于activity的哪个生命周期阶段落实。

夫题没看懂…

widget可以清楚成桌面小控件,

呢可以明白成 某个button, imageview这样的控件…

onmeasure() //总结 控件在屏幕及之席

某某view要显在界面  ondraw 被出示到界面及的 .

  1. 告表明下以单线程模型中Message、Handler、Message
    Queue、Looper之间的涉。

  2. AIDL的齐全是啊?如何行事?

Android interface definition language (android接口定义语言)
,用来跳进程的造访方法,

访问远程的劳动之方法.肿么办事 day7queryStudent .

手机卫士 Itelephony接口挂断电话.

  1. 吁表达下Android程序运行时权和文件系统权限的分别。

Android程序执行需要读取到安全敏感项必需在androidmanifest.xml中扬言相关权限请求,
打电话,访问网络,获取坐标,读写sd卡,读写联系人等..安装之时光会唤醒用户…

drwx

文件系统的权杖是linux权限.
比如说sharedpreference里面的Context.Mode.private 
Context.Mode.world_read_able   Context.Mode_world_writeable

777自己 同组 其他

  1. 系统上安装了余浏览器,能否指定某个浏览器访问指定页面?

找到相应之浏览器的意,传递数据URI , 激活这一个功效

Intent intent =newIntent();

intent.setClassName(packageName,className);

intent.seturi()

  1. 针对android主线程的使用和通晓。

主ui线程不可知执行耗时的操作,

  1. 对android虚拟机的理解,包括内存管理机制垃圾回收机制。

虚拟机很有些,空间分外有些,谈谈移动设备的虚拟机的深浅限制 16M ,

探究加载图片的上怎么处理好图片的,d

垃圾堆回收,没有引用的靶子,在某个时刻会叫网gc掉.

  1. Framework工作情势以及原理,Activity是怎么样充分成一个view的,机制是啊。

反射 , 配置文件

可讲下activity的源码,比如说
每个activity里面都有window.callback和keyevent.callback,一些回调的接口或者函数吧.
框架将activity创立出来就会晤调用内的这么些回调方法,会调用activity生命周期相关的方法.

Activity创立一个view是经过ondraw 画出来的,
画这么些view往日为,还相会调用onmeasure方法来计量彰显的大小.

36.  android本身的片段限制,比如apk包大小限制,读取大文件时的时限制。

这问题问底发出题目, apk包大小限制糟糕说,

极品飞车有100M或会弄虚作假及手机及,

场所google market上分外程序  主程序 很有些 5~10M    下载sdcard

15分钟之内 申请退款

apk包,精简包, 素材存放于劳务器. 游戏程序.

朗诵大文件之岁月限定应该是main线程里面的日范围吧.

Activity不要跨越5秒.

Service不要过20秒

  1. 如何加载的音乐消息,如何改进其效率。

Android提供mediascanner,mediaStore等接口,音乐文件的信还谋面存放到网的数据库表中,可以通过content
provider获取,

来得出,改革功效,是单广大问题, 可以打以下八只地点回答,

分批加载数据,延时加载数据, 合理施用缓存等…

  1. ListView怎么着提升该功效?

复用convertview,历史的view对象

收缩子孩子查询的次数 viewholder

异步加载数据,分页加载数据,

利用静态的view对象 制止创立了多之view.

  1. 开行将来,改变系统语言,应用之言语会转移吗?

40.
启动一个程序,可以主界面点击图标进入,也得以自一个次中跳转过去,二者有啊区别?

有别于是冲activity在manifest里面的部署,那么些activity可能会师在不同之task栈里面

intent设置的flag  flag_new_task

  1. Android程序及Java程序的分?

Android程序用android sdk开发,java程序用javasdk开发.

Android SDK引用了多数的Java SDK,少数局部被Android
SDK放任,比如说界面部分,java.awt 
swing package除了java.awt.font被引述他,其他还让丢,在Android平台开发中莫可以选用。
android sdk 添加工具jar httpclient , pull  opengl

将Java游戏或者j2me程序移植到Android平台的历程中,

Android  SDK与JavaSDK的分是十分需要留意的地点。

sampledataadpter()

  1. Android中Task任务栈的分配。

先是我们来拘禁下Task的定义,Google是这么定义Task的:a task is what the
user experiences asan “application.” It’s a group of related activities,
arranged in astack. A task is a stack of activities, not a class or an
element in themanifest file.
这意思就是Task实际上是一个Activity栈,平常用户感受的一个Application就是一个Task。从这概念来拘禁,Task跟瑟维斯(Service)或者其余Components是一贯不外关系的,它然则是指向Activity而言的。

Activity有异的启动格局,可以影响到task的分配

Task,简单的游说,就是千篇一律组为栈的情势聚集在共的Activity组件集合。它们来黑的上下驱关联,新参与的Activity组件,位于栈顶,并只来于栈顶的Activity,才会发生空子跟用户举办互。而当栈顶的Activity完成使命退出的时光,Task会将那多少个退栈,并吃生一个用走至栈顶的Activity来给用户面对面,直至栈中再不管复多Activity,Task截至。

事件

Task栈(粗体为栈顶组件)

点开Email应用,进入收件箱(Activity A)

A

入选一查封邮件,点击查看详情(Activity B)

AB

点击回复,最先勾画新邮件(Activity C)

ABC

写了几行字,点击采纳联系人,进入选用联系人界面(Activity D)

ABCD

采纳好了联络人,继续写邮件

ABC

写好邮件,发送完,回到原邮件

AB

点击重返,回到收件箱

A

退出Email程序

null

要是上表所示,是一个实例。从用户从进入邮箱起始,到回复完成,退出应用整个过程的Task栈变化。这是一个规范的栈格局,对于多数底景,这样的Task模型,足以应付,但是,涉及到实际的性能、开销等题材,就会转移得残酷许多。

按部就班,启动一个浏览器,在Android中凡是一个较沉重的过程,它用做多开始化的行事,并且会暴发无略之内存开销。但与此同时,用浏览器打开一些情节,又是一般接纳都会师有一个需要。设想一下,假使同时发生十只运行着的运(就会指向承诺着是基本上个Task),都亟需启动浏览器,这将凡一个多么残酷之排场,十只Task栈都堆积着大雷同的浏览器Activity,

大凡多么华丽的同种植浪费啊。

于是乎你会有这般同样栽考虑,浏览器Activity,可免得以当做一个单身的Task而存在,不管是来那多少个Task的哀告,浏览器的Task,都无会面由并过去。这样,即便浏览器Activity本身要保障的状态又多了,但完全的开销将大大的抽,这种放弃小家啊大家的作为,如故挺值得赞誉的

standard”, “singleTop”,”singleTask”, “singleInstance”。

standard情势,
是默认的吗是标准的Task情势,在没有其他因素的熏陶下,使用是情势之Activity,会协会一个Activity的实例,参加到调用者的Task栈中失,对于以频度一般开销一般呀还相似的Activity而言,standard情势的是极端方便的,因为它逻辑简单条理清晰,所以是默认的选。

设singleTop形式,基本上吃standard一致,仅于呼吁的Activity正好在栈顶时,有所区别。此时,配置成singleTop的Activity,不再会组织新的实例参与到Task栈中,而是将新来的Intent发送至栈顶Activity中,栈顶的Activity可以经过重载onNewIntent来拍卖新的Intent(当然,也堪无视…)。这些格局,降低了坐落栈顶时的有的重支付,更制止了一部分惊愕之所作所为(想象一下,假使以栈顶连续几单依旧同等的Activity,再顶尖级退出的下,这是哪些的用户体验…),很抱有会出更新的列表Activity显示。一个逼真的实例是,在Android默认提供的下被,浏览器(Browser)的书签Activity(BrowserBookmarkPage),就因故的是singleTop。

singleTask,和singleInstance,则皆以的另辟Task的不二法门。

申明为singleTask的Activity,最多才来一个实例存在,并且,位于盖它呢彻底的Task中。所有对该Activity的求,都会合超越到该Activity的Task中举行举行。singleTask,很象概念遭到之单个情势,所有的改都是按照一个实例,这一般用当构造成本相当酷,但切换成本相比较小之Activity中。最登峰造极的事例,仍旧浏览器接纳的主Activity(名也Browser…),它是显得时tab,当前页面内容的窗口。它的布局成本大,但页面的切换依然相比较快的,于singleTask相配,仍然挺天作的同之。

singleInstance显得越极端一些。在多数时候singleInstance与singleTask完全一致,唯一的差在,singleInstance的Activity,是其所在栈中特局部一个Activity,如果提到到之任何Activity,都移交到其他Task中开展。那使singleInstance的Activity,像相同座孤岛,彻底的黑盒,它不关心请求来自何方,也未计较后续由何人执行。在Android默认的次第应用中,很少发生那样的Activity,在自己个人的工实践备受,曾尝试以出道词典的快捷取词Activity中使了,

是以自己觉着神速得到词入口充分好(从notification中点选进入),并且会当相继场所下,应该做得净独立。

良之apk拆成 很多略带的apk

●Activity的android:affinity属性

1.部署后当启动之activity时就是先行去找寻来无发出activity的切身和力属性相同有就投入者

activity所于的任务中从未就新起来任务

2.affinity自效能要的口径二者兼具一个:

1.intent包含FLAG_ACTIVITY_NEW_TASK标记

2.activity元素启用了allowTaskReparenting属性.

  1. 于Android中,怎么省内存的下,怎么主动回收内存?

回收已采用的资源,

理所当然之应用缓存

客观设置变量的用意范围…  application对象

//将来之某一段时间执行

System.gc();

  1. 不同工程中之章程是否足以互相调用?

可,列举aidl访问远程服务之例子.

  1. 在Android中凡怎样兑现判断区分电话的状态,去电,来电、未接通来电?

Day8 showAddressService.java

  1. dvm的长河同Linux的过程, 应用程序的过程是否为跟一个概念

Dvm的历程是dalivk虚拟机进程,每个android程序还运行在友好的长河之中,

每个android程序系统还碰面于他分配一个单独的liunx  uid(user id),

每个dvm都是linux里面的一个进程.所以说即刻片只经过是一个进程.

  1. sim卡的EF 文件来哪打算

Sim卡相关的东西,没接触了

  1. 哪些判断是否出SD卡?

安排文件被发生sd卡的权杖, 通过environment的静态方法,

if
(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){

  1. 嵌入式操作系统内存管理出啊二种植, 各起哪特征。

页式,段式,段页,等 …

  1. 嗬是嵌入式实时操作系统, Android 操作系统属于实时操作系统吗?

实时操作系统是因当外界事件或者数量暴发时,可以接受并因十足快之速与拍卖,其拍卖的结果又可以以确定之工夫里面来决定生育过程仍然针对拍卖连串作出连忙响应,并操纵所有实时任务协调一致运行的嵌入式操作系统。紧要用于工业控制、军事装备、航空航天等世界对网的响应时间来苛刻的要求,这就待用实时系统。又只是分为软实时和身心健康时有限栽,而android是基于linux内核的,由此属于软实时。

  1. 一如既往长条极其丰裕之欠音讯约占多少byte?

粤语70(包括标点),英文160,160独字节 这么些说法无确切,

要同手机制式运营商等音信发出关.

做实验,看源码

ArrayList msgs =sms.divideMessage(message);

for (String msg : msgs) {

sms.sendTextMessage(phoneNumber, null, msg, pi, null);

}

  1. Linux中过进程通信的两种植方法 。

linux编程

#管道( pipe
):管道是同一种植半双工的通信情势,数据只好单为流动,而且不得不于具有亲缘关系之过程中以。进程的深情关系一般是负父子进程关系。

#大名鼎鼎管道 (named pipe):
出名管道也是半双工的通信模式,可是它们同意无亲缘关系进程中的通信。

#信号量( semophore ):
信号量是一个计数器,可以据此来控制多只经过对共享资源的看。它时作为同一种锁机制,防止有经过在访问共享资源时,其他进程也拜会该资源。因此,重要作为进程中及同进程内不同线程之间的一起手段。

#信队列( message queue ):
音讯队列是由于信息之链表,存放于根本中连由新闻队列标识符标识。信息队列制伏了信号传递消息少、管道只好承载无格式字节流以及缓冲区大小受限等老毛病。

#信号 ( sinal ):
信号是一致种相比复杂的通信形式,用于通告收过程有事件都发。

#766游戏网官网,共享内存( shared memory
):共享内存就是炫耀一截会给别进程所走访的内存,这段共享内存由一个经过成立,但差不三个经过都得以看。共享内存是无比抢的
IPC
情势,它是本着任何进程之中通信格局运行效用不如而特别规划之。它往往与另通信机制,如信号两,配合使用,来落实进程之中的齐同通信。

#拟接字( socket ):
套解口也是千篇一律栽进程中通信机制,与另通信机制不同之是,它而用来不同以及里面的过程通信。

  1. 谈谈对Android NDK的理解。

native develop kit   只是一个接力编译的家伙  .so

1.啊时用ndk,实时性要求大,游戏,图形渲染, opencv (人脸识别) , ffmpeg ,
rmvb  mp5 avi 高清解码. ffmpeg,opencore.

2.为什么用ndk,ndk的助益 ,缺点 ,

咱种被那么些地方用到了ndk,

  1. 谈谈Android的独到之处和不足之处。

1、开放性,开源ophone  阿里云( 完全包容android)

2、挣脱运营商束缚

3、充裕的硬件选取 mtk android

4、不深受任何限制的开发商

5、无缝结合的Google应用

短也暴发5处在:

1、安全题材、隐私问题

2、卖手机的莫是绝酷运营商

3、运营商对Android手机依然暴发影响

4、山寨化严重

5、过分倚重开发商,缺乏标准配置

  1. Android系统遭到GC什么状况下会产出内存泄露为?  视频编解码/内存泄露

检测外存泄露   工具

mat

C:\Users\lenovo\Desktop\prof>hprof-convcom.example.testmat.hprof
convert-com.ex

ample.testmat.hprof

致使内存泄漏重要的因是,先前申请了内存空间而忘记了自由。要是程序中设有对无用对象的援,那么这么些目的就是会师驻留内存,消耗内存,因为不可以被垃圾回收器GC验证这一个目的是不是不再需要。假使在对象的援,这么些目的就是受定义也”有效之移位”,同时不会合被放。要规定目的所占据内存将被回收,我们尽管如要确认欠对象不再会为运。典型的做法就是把对象数据成员设为null或者由集合中易除该目的。但当有变量不欲日常,不待明确的设为null,因为一个计执行完毕时,这多少个引用会自动为清理。

Java带垃圾回收的体制,为何还会晤内存泄露也?

Vector v = new Vector(10);

for (int i =1; i < 100; i++)      {

Object o = new Object();

v.add(o);

o = null;

}//此时,所有的Object对象都不曾受放走,因为变量v引用那一个目标。

Java内存泄露的根本原因就是保存了未可能又为拜的变量类型的援

  1. Android UI中的View如何刷新。

于主线程遭受以到view调用Invalide()方法,查看画画板里面更新imageview的法

每当子线程里面能够因此postInvalide()方法;

View view;

view.invalidate();//主线程

view.postInvalidate();//子线程

  1. 粗略描述下Android 数字签名。

Android数字签名

每当Android系统被,所有安装及网的应用程序都自然有一个数字证书,此数字证书用于标识应用程序的作者与当应用程序之间确立信任关系

Android系统要求各一个装置上网的应用程序都是经数字证书签名的,数字证书的私钥则保存在程序开发者的手中。Android将数字证书用来标识应用程序的作者和以应用程序之间创制信任关系,不是由此来控制最后用户可以装哪些应用程序。

此数字证书并不需要权威的数字证书签名机构验证(CA),它只是用来被应用程序包自我认证的。

及一个开发者的差不多少个程序尽可能用和一个数字证书,这可带以下好处。

(1)有利于程序升级,当新版程序和旧版程序的数字证书相同时,Android系统才会师以为那片个次是与一个程序的不同版本。如若新版程序与旧版程序的数字证书不平等,则Android系统认为他俩是不同之顺序,并生顶牛,会要求新程序更改包名。

(2)有利于程序的模块化设计与付出。Android系统允许所有和一个数字签名的程序运行在一个经过面临,Android程序会将她们视为与一个主次。所以开发者可以以协调的先后分模块出,而用户只待在用的时下载适当的模块。

以签署时,需要考虑数字证书的有效期:

(1)数字证书的有效期要包含程序的估算生命周期,一旦数字证书失效,持有改数字证书的次第用无可知健康升级。

(2)假若五只程序下及一个数字证书,则该数字证书的有效期要含有有程序的预测生命周期。

(3)Android
马克(Mark)et强制要求有应用程序数字证书的有效期要持续至2033年11月22日之后。

Android数字证书包含以下三只中央:

(1)所有的应用程序都必须出数字证书,Android系统不相会设置一个从未数字证书的应用程序

(2)Android程序包下的数字证书可以是于签定的,不需一个大的数字证书机构签约认证

(3)假如如正规颁发一个Android,必须动一个适宜的私钥生成的数字证书来让程序签名,而休可知运用adt插件或者ant工具转的调剂证书来发表。

(4)数字证书都是起有效期的,Android只是在应用程序安装之时光才会检查证的有效期。假若程序已经设置于系受,即使证书过期也不相会影响程序的正规效率。

  1. 什么是ANR 咋样制止它们?

在Android上,假若你的应用程序有一段时间响应不够利索,系统会向用户显示一个对话框,这一个对话框称作应用程序无响应(ANR:Application
Not
Responding)对话框。用户可择让程序继续运行,不过,他们在以你的应用程序时,并无期望每一回都设拍卖此对话框。由此,在先后里对响应性能的规划大关键,那样,系统非会合展现ANR给用户。

Activity 5秒  broadcast10秒

耗时之操作 worker thread里面就,handler message…AsynTask ,
intentservice.等…

  1. android中的卡通有啊几好像,它们的表征及分是呀?

少种,一栽是Tween动画、还有平等种植是Frame动画。

Tween动画,这种实现形式可以假若视图组件移动、放大、减弱与有透明度的变迁;

得经过布局文件,可以经过代码

1、控制View的动画

a)  alpha(AlphaAnimation)

日渐变透明

b)  scale(ScaleAnimation)

日趋变尺寸伸缩

c)  translate(TranslateAnimation)

镜头转换、地点走

d)  rotate(RotateAnimation)

画面转换,旋转动画

2、控制一个Layout里面子View的动画效果

a)  layoutAnimation(LayoutAnimationController)

b)  gridAnimation(GridLayoutAnimationController)

其它一样栽Frame动画,传统的卡通方法,通过逐个的播放排列好的图片来促成,类似电影。

特性动画 ObjectAnimator

  1. 说说mvc形式的原理,它以android中之采取。

MVC英文就Model-View-Controller,即把一个运之输入、处理、输出流程按Model、View、Controller的法展开分离,这样一个以被分为两只层——模型层、视图层、控制层。

Android中界面部分吗选用了脚下相比较流行的MVC框架,在Android中M就是应用程序中第二进制的数,V就是用户的界面。Android的界面直以XML文件保留之,界面开发变的丰富便利。在Android中C也是丰盛简单的,一个Activity可以出多独界面,只待将视图的ID传递到setContentView(),就指定了因为何人视图模型显示数据。

于Android
SDK中之数据绑定,也仍然选择了同MVC框架好像之点子来突显数据。在控制层将官数据论视图模型的求(也不怕是Android
SDK中的艾达(Ada)pter)封装就足以一向当视图模型上体现了,从而实现了数码绑定。比如显示Cursor中有所数据的ListActivity,其看来图层就是一个ListView,将数据封装为ListAdapter,并传递给ListView,数据就是当ListView中显示。

  1. 通过点击一个网页上之url 就足以完成程序的全自动装,描述下原理

Day11 AddJavascriptInterface

new Object{

callphone();

installapk();

}

64,瑟维斯(Service)和Activity在同一个线程吗

默认情状同一线程 main主线程 ui线程

65,java中之soft reference是只什么事物

斯特朗(Strong)Reference是 Java的默认引用实现, 它会尽可能抬高时之水土保持于 JVM 内,
当没有外对象指为它们常 GC 执行后将汇合吃回收

SoftReference会尽可能抬高之保留引用直到
JVM内存不足时才谋面被回收(虚拟机保证), 这无异于表征使得 SoftReference
万分适合缓存

运详细显示客户端图片的缓存

66,udp连接和TCP的不同之处

tcp/滑动窗口协议. 拥塞控制.   面向连接 流

udp 不关注数据是否上,是否死   面向无论连接

画面优先. tcp

明快优先  udp

67, android开发被怎么去调试bug

逻辑错误

1.断点 debug

  1. logcat , traceview

界面布局,显示 hierarchyviewer.bat

68.service中可以弹土司么

可以

69.勾10个大概的linux命令

cat ls ps psw wc mv rm cd ping tracert find grep tail vi gccmake
ifconfig

startup dhcp

70 JNI调用常用之鲜只参数

JNIEnv *env,jobject javaThis

  1. 开出android工程的目结构

src

android. jar

asset

res

gen

manifest

  1. ddms 和traceview的区别.

daivilk debug managersystem

1.每当用之主activity的onCreate方法吃参预Debug.startMethodTracing(“要生成的traceview文件的名”);

2.同一于主activity的onStop方法吃入Debug.stopMethodTracing();

3.还要使以AndroidManifest.xml文件被布置权力

3.重复编译,安装,启动服务,测试好得对应之traceview文件(adb pull
/sdcard/xxxx.trace)。

4.直接在命令执行输入traceview
xxxxtrace,弹出traceview窗口,分析对应之利用即可。

traceview 分析程序执行时与频率

KPI :key performance information :关键性能指标:

splash界面不克过5秒

从今splash 界面加载mainactivity不可知超越0.7秒

对于Android 1.5跟以下的本子:不补助。

对于Android
1.5上述2.1生(含2.1)的本子:受限帮忙。trace文件只可以很成到SD卡,且要以先后中在代码。

对此Android
2.2臻(含2.2)的版:全帮助。可以不要SD卡,不用于先后中加代码,直接自己之所以DDMS就足以经过Traceview。

  1. 动mvc的格局重构代码

1) 重构前的代码Bmi.java:

packagecom.demo.android.bmi;

importjava.text.DecimalFormat;

importandroid.app.Activity;

importandroid.os.Bundle;

importandroid.view.View;

importandroid.view.View.OnClickListener;

importandroid.widget.Button;

importandroid.widget.EditText;

importandroid.widget.TextView;

publicclassBmiextendsActivity {

/** Called when the activity is firstcreated. */

@Override

publicvoidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

// Listen for button clicks

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

button.setOnClickListener(calcBMI);

}

privateOnClickListenercalcBMI=newOnClickListener() {

@Override

publicvoidonClick(View v) {

DecimalFormatnf =newDecimalFormat(“0.00”);

EditTextfieldheight = (EditText) findViewById(R.id.height);

EditTextfieldweight = (EditText) findViewById(R.id.weight);

doubleheight =
Double.parseDouble(fieldheight.getText().toString())/ 100;

doubleweight =
Double.parseDouble(fieldweight.getText().toString());

doubleBMI = weight / (height * height);

TextViewresult = (TextView) findViewById(R.id.result);

result.setText(“Your BMI is “+ nf.format(BMI));

// Give health advice

TextViewfieldsuggest = (TextView) findViewById(R.id.suggest);

if(BMI > 25) {

fieldsuggest.setText(R.string.advice_heavy);

}elseif(BMI < 20) {

fieldsuggest.setText(R.string.advice_light);

}else{

fieldsuggest.setText(R.string.advice_average);

}

}

};

}

Step1:抽取所有界面元件的注解和定义,整合到独一个函数findViews()中;

//声明view

privateButtonbutton_calc;

privateEditTextfield_height;

privateEditTextfield_weight;

privateTextViewview_result;

privateTextViewview_suggest;

//定义

privatevoidfindViews() {

button_calc= (Button) findViewById(R.id.submit);

field_height= (EditText) findViewById(R.id.height);

field_weight= (EditText) findViewById(R.id.weight);

view_result= (TextView) findViewById(R.id.result);

view_suggest= (TextView) findViewById(R.id.suggest);

}

夫部分即是MVC中的V:View视图。

Step2:抽取程序的逻辑(即界面元件的处理逻辑),整合及函数setListensers()中;

//Listen for button clicks

privatevoidsetListensers() {

button_calc.setOnClickListener(calcBMI);

}

这有就凡MVC中的C:Controller控制器。

进而,onCreate()就显得特别简洁、明了了:

publicvoidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

findViews();

setListensers();

}

Step3:修改按钮监听器calcBMI中相应的有些(首假使变量已经于视图部分概念了);

privateOnClickListenercalcBMI=newOnClickListener() {

@Override

publicvoidonClick(View v) {

DecimalFormatnf =newDecimalFormat(“0.00”);

doubleheight =Double.parseDouble(field_height.getText().toString())
/ 100;

doubleweight
=Double.parseDouble(field_weight.getText().toString());

doubleBMI = weight / (height * height);

// Present result

view_result.setText(“Your BMI is “+ nf.format(BMI));

// Give health advice

if(BMI > 25) {

view_suggest.setText(R.string.advice_heavy);

}elseif(BMI < 20) {

view_suggest.setText(R.string.advice_light);

}else{

view_suggest.setText(R.string.advice_average);

}

}

};

总而言之,此重构的目标仅是要程序的系统更加清晰,即令人口一眼为去,就能怪易地辨识出界面(View)应该写以乌,程序逻辑(Controller)应该写在哪,最后使保障及扩张代码变得尤为容易!

实际,重筑很粗略,通读代码,感觉啊边不绝爽,就变更这边吧!(我时之感受)

一个美好的代码应该是能于丁觉得舒适的!

2)     重构后的代码Bmi.java:

packagecom.demo.android.bmi;

importjava.text.DecimalFormat;

importandroid.app.Activity;

importandroid.os.Bundle;

importandroid.view.View;

importandroid.widget.Button;

importandroid.widget.EditText;

importandroid.widget.TextView;

publicclassBmiextendsActivity {

privateButtonbutton_calc;

privateEditTextfield_height;

privateEditTextfield_weight;

privateTextViewview_result;

privateTextViewview_suggest;

/** Called when the activity is firstcreated. */

@Override

publicvoidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

findViews();

setListensers();

}

//定义

privatevoidfindViews() {

button_calc= (Button) findViewById(R.id.submit);

field_height= (EditText) findViewById(R.id.height);

field_weight= (EditText) findViewById(R.id.weight);

view_result= (TextView) findViewById(R.id.result);

view_suggest= (TextView) findViewById(R.id.suggest);

}

// Listen for button clicks

privatevoidsetListeners() {

calcbutton.setOnClickListener(calcBMI);

}

privateButton.OnClickListenercalcBMI=newButton.OnClickListener()
{

publicvoidonClick(View v) {

DecimalFormatnf =newDecimalFormat(“0.0”);

doubleheight =
Double.parseDouble(field_height.getText().toString()) / 100;

doubleweight =
Double.parseDouble(field_weight.getText().toString());

doubleBMI = weight / (height * height);

// Present result

view_result.setText(getText(R.string.bmi_result) + nf.format(BMI));

// Give health advice

if(BMI > 25) {

view_suggest.setText(R.string.advice_heavy);

}elseif(BMI < 20) {

view_suggest.setText(R.string.advice_light);

}else{

view_suggest.setText(R.string.advice_average);

}

}

};

}

发表评论

电子邮件地址不会被公开。 必填项已用*标注