常会师试题整理

转自

  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和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();

  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);

透过bindService的法门去启动一个劳务,

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的生命周期中,被回调的章程比Activity少一些,唯有onCreate,
onStart, onDestroy,

onBind和onUnbind。

一般说来有两种办法启动一个瑟维斯,他们对Service生命周期的震慑是不平等的。

1通过startService

Service会经历
onCreate到onStart,然后处于运行景况,stopService的时候调用onDestroy方法。

假诺是调用者自己平昔退出而从未调用stopService的话,Service会平昔在后台运行。

2通过bindService

Service会运行onCreate,然后是调用onBind,
那么些时候调用者和Service绑定在联合。调用者退出了,Srevice就会调用onUnbind->onDestroyed方法。

所谓绑定在共同就共存亡了。调用者也得以因此调用unbindService方法来终止服务,那时候Srevice就会调用onUnbind->onDestroyed方法。

须求专注的是只要那多少个措施交织在联合的话,会并发哪些情况呢?

一个规范是Service的onCreate的点子只会被调用两次,就是您随便多少次的startService又bindService,Service只被创立三遍。

借使先是bind了,那么start的时候就径直运行Service的onStart方法,如若先是start,那么bind的时候就从来运行onBind方法。

假若service运行时期调用了bindService,那时候再调用stopService的话,service是不会调用onDestroy方法的,service就stop不掉了,只好调用Unbind瑟维斯,
service就会被灭绝

万一一个service通过startService 被start之后,数十次调用startService的话,service会很多次调用onStart方法。数十次调用stopService的话,service只会调用两次onDestroyed方法。

如若一个service通过bindService被start之后,很多次调用bindService的话,service只会调用三次onBind方法。

很多次调用unbindService的话会抛出更加。

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)或者客户端连接(bind瑟维斯)到它。当内存不足时,须求保持,拥有service的长河具有较高的优先级。

1. 假设service正在调用onCreate, 
onStartCommand或者onDestory方法,那么用于当前service的长河相当于前台进度以制止被killed。

2.
一旦当前service已经被启动(start),拥有它的长河则比那多少个用户可知的进程优先级低一些,然而比那一个不可知的进度更要紧,那就代表service一般不会被killed.

3. 万一客户端已经延续到service
(bind瑟维斯),那么所有Service的进程则装有最高的优先级,可以认为service是可知的。

4. 假诺service可以选拔startForeground(int,
Notification)方法来将service设置为前台状态,那么系统就认为是对用户可知的,并不会在内存不足时killed。

假定有其余的应用组件作为Service,Activity等运行在相同的历程中,那么将会大增该进程的重点。

1.Service的风味能够让她在后台一贯运行,可以在service里面创造线程去已毕耗时的操作.

2.Broadcastreceiver捕获到一个轩然大波过后,可以起一个service来落成一个耗时的操作.

3.远程的service假若被启动起来,可以被多次bind,但不会重新create. 
OPPO手机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. 请描述一下Broadcast 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的概念,谷歌是这么定义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 ):
信号是一种相比复杂的通讯格局,用于通知接收进程某个事件已经暴发。

#共享内存( shared memory
):共享内存就是炫耀一段能被其他进程所走访的内存,那段共享内存由一个经过创建,但多少个过程都可以访问。共享内存是最快的
IPC
格局,它是本着其他进度间通讯形式运行作用低而特意布置的。它往往与任何通讯机制,如信号两,同盟使用,来兑现进度间的一起和通讯。

#套接字( socket ):
套解口也是一种进度间通讯机制,与其他通讯机制分化的是,它可用以不一样及其间的历程通讯。

  1. 谈谈对Android NDK的理解。

native develop kit   只是一个陆续编译的工具  .so

1.如曾几何时候用ndk,实时性须要高,游戏,图形渲染, opencv (人脸识别) , ffmpeg ,
rmvb  mp4 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
马克et强制必要具备应用程序数字证书的有效期要不断到2033年5月22日将来。

Android数字证书包罗以下多少个要点:

(1)所有的应用程序都不可能不有数字证书,Android系统不会安装一个一贯不数字证书的应用程序

(2)Android程序包使用的数字证书可以是自签署的,不要求一个高于的数字证书机构签约认证

(3)即使要规范公布一个Android,必须拔取一个适合的私钥生成的数字证书来给程序签名,而不可以使用adt插件或者ant工具生成的调节证书来公布。

(4)数字证书都是有有效期的,Android只是在应用程序安装的时候才会检讨注解的有效期。若是程序已经设置在系统中,即便证书过期也不会影响程序的正规机能。

  1. 766游戏网官网,哪些是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中的Adapter)封装就足以平昔在视图模型上突显了,从而已毕了数额绑定。比如显示Cursor中有着数据的ListActivity,其视图层就是一个ListView,将数据封装为ListAdapter,并传递给ListView,数据就在ListView中体现。

  1. 由此点击一个网页上的url 就能够完结程序的机动安装,描述下原理

Day11 AddJavascriptInterface

new Object{

callphone();

installapk();

}

64,Service和Activity在同一个线程吗

默许景况同一线程 main主线程 ui线程

65,java中的soft reference是个怎样事物

StrongReference是 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)的版本:全支持。可以毫不CF卡,不用在程序中加代码,直接自己用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)应该写在何地,最后使有限帮助和伸张代码变得更其便于!

实际上,重构很不难,通读代码,感觉哪边不太爽,就改那边吧!(我眼前的感想)

一个佳绩的代码应该是能令人感觉到舒畅(英文名:Jennifer)的!

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);

}

}

};

}

相关文章

发表评论

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