那个年大家忘记的底蕴766游戏网官网

1.怎么着是Activity?问的不太多,说点有深度的

四大组件之一,一般的,一个用户交互界面对应一个activity

setContentView() ,// 要出示的布局

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

button.setOnclickLinstener{

}

自家付出常用的的有ListActivity, PreferenceActivity ,TabAcitivty等…

PreferenceActivity与安装有关的activity

TabActivity就是有一个Tabhost

假如界面有联手的特点仍然功效的时候,还会协调定义一个BaseActivity.

界面的初阶化,进程对话框的突显与销毁doubanservice

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

生命周期描述的是一个类
从创建(new出来)到已故(垃圾回收)的经过中会执行的方法..

在那么些过程中 会针对差距的性命阶段会调用分化的措施

Activity从创造到销毁有各类情状,从一种情形到另一种景况时会激发相应的回调方法,那一个回调方法包蕴:oncreate
ondestroy onstop onstart onresume onpause

实质上那些主意都是两两对应的:

onCreate创建与onDestroy销毁;

onStart可见与onStop不可见;

onResume可编辑(即焦点)与onPause;

对话框是activity的一部分.

为此对话框的弹出,指定上下文必须是 Activity.this

由此弹出对话框(对话框获取关节)不会调用任何生命周期方法

那6个方法是相对应的,那么就只剩下一个onRestart方法了,这一个办法在怎么着时候调用呢?

答案就是:在Activity被onStop后,然则尚未被onDestroy,在重复启航此Activity时就调用onRestart(而不再调用onCreate)方法;

如果被onDestroy了,则是调用onCreate方法。

说到底讲自己项目中的经验,比如说豆瓣客户端每回进入某个界面的时候都要探望最新的数目,这些刷新列表的操作
就坐落onStart()的方式里面.

fillData() 这样保障每趟用户观察的数据都是时尚的.

多媒体播放, 播放来电话.

onStop() 视频声音设置为0 , 记录视频播放的职责 mediaplayer.pause();

onStart() 按照保存的动静复苏现场. mediaplayer.start();

在读文档的时候 还发现 activity还有四个办法 onPostResume() 和
OnPostCreate()那八个生命周期的法子,然而开发的时候从不利用过.

那俩方法一般开发是用不到,是给框架使用的,在onResume和onCreate方法往日调用

3.五个Activity之间跳转时肯定会执行的是哪多少个方法。

相似景观比如说有七个activity,分别叫A,B ,当在A里面激活B组件的时候, A
会调用 onPause()方法,然后B 调用onCreate() ,onStart(), OnResume() ,

本条时候B覆盖了窗体, A会调用onStop()方法.要是B呢
是个透明的,或者是对话框的样式,就不会调用onStop()方法

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

以此生命周期跟清单文件里的布局有涉嫌

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

默许首先销毁当前activity,然后重新加载

onpause onstop ondestory oncreate onstart onresume

2、设置Activity的android:configChanges=”orientation|keyboardHidden”时,切屏不会再也调用各样生命周期,只会实施onConfigurationChanged方法

Api13之上还索要给configChanges配置screensize一个值

玩耍支付中, 显示屏的通向都是写死的.
因为借使可以切换横竖屏,那么用户体验糟糕,而且还要保证游戏相关数据,相比较消耗时间品质。

5.怎样将一个Activity设置成窗口的体裁。

可以自定义一个activity的样式,style中追加theme:

新建一个Theme,指定他的parent为android:Theme.Dialog,然后Activity添加这些theme即可。

6.你后台的Activity被系统
回收如何做?倘使后台的Activity由于某原因被系统回收了,怎样在被系统回收以前封存当前情景?

而外在栈顶的activity,其余的activity都有可能在内存不足的时候被系统回收,一个activity越处于栈底,被回收的可能性越大.

当activity被系统丰盛回收时调用onSaveInstanceState方法

protectedvoidonSaveInstanceState(Bundle outState) {

super.onSaveInstanceState(outState);

outState.putLong(“id”, 1234567890);

}

publicvoidonCreate(Bundle savedInstanceState) {

//判断 savedInstanceState是还是不是空.

//如若不为空就取出来

super.onCreate(savedInstanceState);

}

7.怎么着退出Activity?如何安全退出已调用四个Activity的Application?

行使场景,例如UC浏览器,你打开了100个页面,然后经常做法是点击重返,点击100次才能健康退出Application。这样用户体验太差,UC浏览器的菜系提供了退出按钮,点击退出即可安全退出应用。

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

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

做法:

1、抛卓殊强制退出:测试没通过?

该方法通过抛格外,使程序Force Close。 Force
close,系统会清空大家的职务栈,清空所有打开的界面。

声明可以,不过,需求缓解的标题是,怎样使程序甘休掉,而不弹出Force
Close的窗口。

//安全停止进度android.os.Process.killProcess(android.os.Process.myPid());

2、记录打开的Activity:

思路:

每打开一个Activity,通过就记录下来。手动退出时,就移除集合。点击退出按钮时,循环关闭集合中的Activity。

步骤:

定义MyApp
继承Application,然后再清单文件中给Application节点指定name为MyApp。

概念成员变量List lists ;

在生命周期方法onCreate方法中起初化:lists = new ArrayList();

每一个activity在执行onCreate()方法的时候 lists.add(this);

Ondestory() lists.remove(this);

当点击退出按钮时,循环关闭集合中的activity

for(Activity activity: lists)

{

activity.finish();

}

3、发送特定广播:

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

//给某个activity 注册接受接受广播的打算

registerReceiver(receiver, filter)

//假如过接受到的是 关闭activity的播音就调用finish()方法 把方今的activity
finish()掉

4、递归退出(不推荐)

在打开新的Activity时行使startActivityForResult,然后自己加标志,在onActivityResult中拍卖,递归关闭。

404 退出程序

OnActivityResult();

*讲一讲你对activity的精通 (有些集团会出有些那种难题,对xxx的明亮)

把温馨的体会写出来即可。

Activity用于与用户交互。

在讲一讲Activity的生命周期,可以使用那个生命周期方法做起初化,

诸如:进入某个界面的时候都要探望最新的数量,就要在onstart方法内填充数据。

再有处理横竖屏时,Activity会摧毁重构,大家在尤其现象需求做越发处理,

譬如说:播放器,正播放时,打入电话,大家须求在onstop方法保存播放进程,然后再onstart方法内读取进程,继续播放。

一日游,固定横竖屏。

粗略介绍onPostResume() 和 OnPostCreate

Activity被系统回收时,要求做的片段操作:重写onSaveInstanceState

开拓七个Activity,如何安全退出Application

8. service是或不是在main thread中举行, service里面是还是不是能执行耗时的操作?

默许景况,倘若没有体现的指定service所运行的进程,
Service和activity是运作在现阶段app所在进程的main thread(UI主线程)里面

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

在子线程中进行 new Thread(){}.start();

非凡情状,可以在清单文件配置 service 执行所在的长河 ,

让service在此外的经过中举办

“cn.itcast.xxx”>

9.多个Activity之间怎么传递数据?

经过Intent传递数据:

基本数据类型可以由此Intent 传递数据

extras.putDouble(key,value)

intent.putExtra(name, value)

传递Bundle对象

Bundle bundle = newBundle();

bundle.putShort(key, value);

intent.putExtras(bundle);

获取数据

取获得激活他的Intent:

Intent intent = getIntent();

Bundlebundle= intent.getExtras();

Bundle类似map的集合 ,存放键值对

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

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

经过Application传递数据

祥和去落到实处自己的application的那么些类,基础连串的application
,每个activity都得以取到

选择那一点,大家得以在Application 定义全局变量
,然后通过那些变量来存储数据。

让对象达成 implementsSerializable接口把目的存放到文件上.

让类已毕Serializable接口,然后可以透过ObjectOutputStream//对象输出流

File file =newFile(“c:\\1.obj”);

FileOutputStream fos=newFileOutputStream(file);

ObjectOutputStream oos =newObjectOutputStream(fos);

Student stu =newStudent();

stu.setId(“10001”);

stu.setName(“zs”);

oos.writeObject(stu);

FileInputStream fis =newFileInputStream(file);

ObjectInputStream ois =newObjectInputStream(fis);

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

System.out.println(stu1.getName());

Parcelable和Serializable

谷歌工程师认为,将文件通过Serializable体系化到文件,然后再读取文件内容加载到内存,太浪费资源,就重写了Serializable,搞了一个Parcelable

Parcelable把对象连串化到android操作系统的一块公用的内存空间,直接操作内存,所以功用会比较高。

Intent传递数据的引用 (大资源文件,都是由此uri形式传递)

intent.setData(Uri)

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

contentResolver.getInputStream(uri);//获取uri对应的流

10.怎么让在开行一个Activity是就开动一个service?

在activity的onCreate()方法里面 startService();

11.同一个主次,但分化的Activity是不是能够置身不相同的Task义务栈中?

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

Intent的flag添加FLAG_ACTIVITY_NEW_TASK单独的职分栈

本条被激活的activity就会在新的task栈里面…

也得以透过配备文件:android:launchMode=”singleInstance”

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

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

startActivity(intent);

service、broadCastReceiver开启Activity,因为他俩默许没有任务栈,所以须求设置flag。设置那个Flag之后,在开启Activity时,会判定当前有木有存在职责栈,借使有则一向用,没有则创设。

12.
Activity怎么和service绑定,怎么在activity中启动自己相应的service?

startService() 一旦被制培育与调用着无关 ,没办法使用service里面的措施

bindService () 把service 与调用者绑定 ,若是调用者被灭绝, service会销毁

bindService() 我们可以动用service 里面的法子

bindService().让activity能够访问到 service里面的主意

绑定service的步骤:

营造一个intent对象,

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

通过bindService的艺术去启动一个服务,

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

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

BIND_AUTO_CREATE.:假如那些服务没有拉开过,则自动开启

代码:

private class myconn implements ServiceConnection

{

//这些点子是异步操作,可能花费几秒的光阴,所以进行完bindService是索要开支一定时间才能获取服务。

public void onServiceConnected(ComponentName name, IBinder service) {

// TODO Auto-generated method stub

//可以通过IBinder的对象 去选用service里面的不二法门

}

public void onServiceDisconnected(ComponentName name) {

// TODO Auto-generated method stub

}

}

13. 14
.什么是Service以及描述下它的生命周期。Service有啥样启动方法,有啥样界别,如何停用Service?

在瑟维斯的生命周期中,被回调的法门比Activity少一些,唯有onCreate,
onStart, onDestroy,onBind和onUnbind。

普普通通有二种方法启动一个Service,他们对Service生命周期的熏陶是差别等的。

1 、通过startService

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

比方是调用者自己平素退出而并未调用stop瑟维斯的话,Service会一贯在后台运行。

2、 通过bindService

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

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

须求专注的是只要那个办法交织在联合的话,会现出什么情况呢?

若果大家工作逻辑相比复杂,那么有可能需要让服务长时间在后台运行,并且还要求调用service的措施,那么就需求既开启服务,又绑定服务。

那就是说有一个尺度是Service的onCreate的法子只会被调用一次,就是您随便多少次的start瑟维斯又bindService,瑟维斯只被创立一遍。

比方先是bind了,那么start的时候就直接运行Service的onStart方法,假设先是start,那么bind的时候就径直运行onBind方法。

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

假定一个service通过start瑟维斯 被start之后,很多次调用startService的话,service会数十次调用onStart方法。很多次调用stopService的话,service只会调用一遍onDestroyed方法。

766游戏网官网,万一一个service通过bindService被start之后,很多次调用bindService的话,service只会调用三回onBind方法。

屡次调用unbindService的话会抛出极度。

15.不用service,B页面为音乐广播,从A跳转到B,再回到,怎么样使音乐继续播放?

以此标题问的很山寨.默许不做任何处理,B里面的音乐都能播放.

赶上标题,
可以任意应变,灵活发挥,多着想些细节,比如说这几个题就能够这么说,说说您对startActivityForResult的精晓()

A开启B的时候,用startActivityForResult()方法,
B重返的时候把播放的动静新闻重临给A ,A继续播放音乐.

不可以经过onSaveInstanceStates来落到实处,因为她是activity被移除义务栈才执行的。

16.什么是IntentService?有什么优点?

IntentService继承Service

万般的service ,默许运行在ui main 主线程

Sdk给咱们提供的惠及的,带有异步处理的service类,

异步处理的方法OnHandleIntent(),默许运行在子线程中,可以处理耗时的操作

17.怎么时候利用Service?

合法文档告诉大家,Android系统会尽量保持拥有service的历程运行,只要在该service已经被启动(start)或者客户端连接(bindService)到它。当内存不足时,须要保持,拥有service的进度具有较高的先期级。

1.
比方service正在调用onCreate,onStartCommand或者onDestory方法,那么用于当前service的进度相当于前台进度以幸免被killed。

2.
即使当前service已经被启动(start),拥有它的进度则比那个用户可知的经过优先级低一些,然而比这么些不可知的历程更着重,那就代表service一般不会被killed.

3. 假如客户端已经延续到service
(bindService),那么具有Service的长河则怀有最高的优先级,可以认为service是可知的。

4.
如若service可以使用setForeground(true)方法来将service设置为前台状态,那么系统就觉得是对用户可知的,并不会在内存不足时killed。

如若有别的的行使组件作为Service,Activity等运行在同样的进度中,那么将会增多该进度的重大。

1.Service的特点可以让她在后台一向运转,可以在service里面创设线程去做到耗时的操作.
天气预先报告 widget 提姆erTask 提姆er 定期执行timertask

2.Broadcast
receiver捕获到一个事变之后,可以启动一个service来完毕一个耗时的操作.

布罗德cast receiver生命周期 和 响应时间很短(10s)

3.远程的service如果被启动起来,可以被数次bind,
但不会重新create.华为手机X10i的人脸识其余service可以被图库使用,可以被摄像机,照相机等次第使用.

18.请描述一下Intent和Intent Filter。

Android 中经过 Intent 对象来表示一条信息,一个 Intent
对象不仅带有有其一信息的目标地,还可以够涵盖音信的始末,那好比一封
Email,其中不仅应当包含收件地方,仍可以分包具体的始末。对于一个 Intent
对象,新闻“目标地”是必须的,而内容则是可选项。

透过Intent 可以落成各类系统组件的调用与激活.

Intent filter:可以清楚为邮局或者是一个信纸的分类系统,定义一些金童玉女原则

其一分拣系统经过3个参数来识别

Action: 动作Intent.ation_view

Data: 数据uriurimime

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”/>

电话的uritel: 12345

http://www.baidu.com

协调定义的uriitcast://cn.itcast/person/10

若果在 Intent Filter 中指定了这个属性,那么只有所有的性质都非常成功时
URI 数据匹配才会成功。

Category序列匹配

节点中可认为组件定义一个 Category 种类列表,当 Intent
中蕴涵那几个列表的拥有类型时 Category 种类匹配才会旗开马到。

默认是DEFAULT

19. Intent传递数据时,可以传递哪些类型数据?

1.貌似的中央数据类型Intent .putextra()intent.getStringextra();

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

20.说说Activity,Intent,Service是何等关系 。笔试常问

那种题材没关系水准,相当于麦当劳和麦当娜的关联是哪些关联?

她俩默认意况下是从未有过什么关联的。

那种题材,就讲下对activity, service,intent的知情。

再说一下 activity、service可以透过intent去激活零部件,传递数据.

说自己项目中有诸如此类一个网络创新的机能,展现界面就用的activity,
后台有个service每隔半小时都去拜访下服务器获取更新的数据…

翻开服务用的是intent来开启

专注有所的笔试,都要硬着头皮说一下谈得来的类型的部分内容。

21.请描述一下Broadcast Receiver。

广播是Android系统的一个事件,假使

有成百上千广播接收者 ,系统现已落到实处了.

播音分二种

有序广播:同步,优先级高的播报,会先接收到广播。

无序广播:异步

优先级应用:即使优先级一样,app的uid越低越先接收到广播(先安装的应用程序的uid会低一些。)

onReceive() 方法.

abortBroadcast();

不变广播有一个特例:指定接收者的播报 .是不得以被截留掉的

sendOrderedBroadcast(intent,receiverPermission,resultReceiver,scheduler,initialCode,initialData,initialExtras);

resultReceiver广播接受者 要是我们来得的指定了播音接收者

无论怎么着 都会接受广播 事件abortBroadcast(); 的措施不会告一段落广播事件

唯有:SetResultData(null);将数据置为null,接收者一看数据是null,就不会进行办法。

Sticky:粘性开发很少用到,不过面试有可能会问到:

sendStickyBroadcast(intent)//阴魂不散的广播 (粘性的播报)

粘性广播,会直接等候intent指定的事件处理完结,才会不复存在。

Wifi设置:发送wifi状态改变的播音,系统就是经过sendStickyBroadcast来兑现的,因为获取wifi状态改变是一个很耗时的操作,假如用一般发送广播形式,还没等wifi状态获取完,广播就得了了。用于吸纳系统的播音公告,
系统会有成百上千sd卡挂载,手机重启,广播布告,低电量,来短信等,一个apk的安装成功…

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

sms_received

来赢得短信过来的播放, 按照黑名单来判断是还是不是拦截该短信.

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

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

sendBroadcast(intent);

播音接收者注册:

清单文件注册:一旦APK装到手机上,那一个广播接收者就见效

代码注册:唯有当代码执行时,才会收效

22.在manifest和代码中哪些注册和使 用broadcast receiver。

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

详见见工程代码.

代码中登记,如果代码没有进行,就承受不到广播事件

registerReceiver(receiver,filter);

23.请介绍下ContentProvider是何许促成数据共享的。

ContentProvider是系统的一个服务,大家要落到实处数据共享要求重写ContentProvider

把自己的数目通过uri的格局共享出去

android系统下 差异程序 数据默许是不能够共享访问

亟需去贯彻一个类去继承ContentProvider

public class PersonContentProvider extends ContentProvider{

public boolean onCreate(){

//..

}

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

insert(Uri, ContentValues)

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

delete(Uri, String, String[])

}

content:// 代表contentprovider

应用系统Provider

技巧: 1.看urlmarcher.

  1. 据悉匹配码 查看增删改查的切实落到实处

24.请介绍下Android的数据存储格局。

文本可以存到手机的内存,和sdcard中

手机内存文件存放地方: /data/data/包名/files

能够经过context.openFileInput(name)默许是个人的拜会权限 ,只好读

Sdcard,读不必要权限,写必要权限。

数据库 sqlite:data/data/包名/database/xxx.db

SharedPreference//包名/shared_prepsContext.modeprivate

网络存放

socket 方式

httpHttpUrlConnection方式

HttpClient方式HttpPost HttpGet

ftp的网络file transport protocol

25.怎么要用ContentProvider?它和sql的兑现上有啥差异?

可以按照自己的事情逻辑揭露相应操作,屏蔽数据存储的细节,对用户透明,用户只须要关爱操作数据的uri和呼应的参数,就可以了。

今非昔比app之间共享,操作数据

唯独contentprovider 还足以去增删改查本地文件. xml文件的读取,更改,

互联网数据读取更改 (那种操作不多)

Sql也有增删改查的方法.

26.请介绍下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.apkfwvga854*480320*240

洋洋玩耍还在利用绝对化布局,因为相对布局可以精准的知晓组件的职责,可以做相应的点击事件。

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

至于布局的题材:平板的开发与手机的开销有何的分别:

区分主要差异在UI上。

平板任务管理器的界面布局用 gridview

手机 职务管理 listview

27.谈谈UI中,Padding和Margin有怎么样界别?

Padding 文字对边框, margin是控件与控件之间的偏离

28. widget相对地方的做到在activity的哪位生命周期阶段贯彻。

本条题没看懂…

widget可以领略成桌面小控件,

onReceive方法,广播接收者?

也可以了然成 某个button, imageview那样的控件…

onMeasure() // 总括 控件在屏幕上的坐席

onDraw 呈现到界面上的

29.请表明下在单线程模型中Message、Handler、Message
Queue、Looper之间的关系。

Activity的主线程被创制时,系统默认会帮创制Looper,然后会活动调用looper的parepare方法,让轮询器待命。

主线程中还有一个Message Queue的arrayList集合

因为唯有主线程才能够更新UI,所以子线程A、子线程B要想更新UI,必须透过Handler去发送新闻。发送的音讯被置于Message
Queue队列中,然后这些Looper轮询器,会不停的轮询Message
Queue队列中的音信,倘诺发现有必要处理的音讯,就会调用Message的handleMessage方法。

怎么着在子线程里面 呈现土司?

手工调用:Looper.parepare();

显示Toast

手工轮询一回,发送音信:Looper.loop();

子线程中只要使用Looper,就不可能再利用handler去发送新闻,因为Looper会将音信发送给主线程。

30. AIDL的完备是何许?咋办事?**

Android interface definition language (android接口定义语言) ,

用来跨进程的拜会方法,

走访远程的服务的方法. 怎样行事 手机卫士程序锁

.endcall();

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

31.请表明下Android程序运行时权限与文件系统权限的区分。

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

文件系统的权杖是linux系统的文件权限.

-rw—— 私有权力

-rw-rw-rw- 全局可读可写

比如说sharedpreference里面的Context.Mode_private

Context.Mode.world_read_ableContext.Mode_world_writeable

777最大权力,全局可读可写可举办

32.系统上安装了各种浏览器,能或不能指定某浏览器访问指定页面?

亟待找到呼应的浏览器的用意,传递数据URI , 激活那些意向

Intent .setAction(VIEW)

setData(“http://”)

激活系统的浏览器:

Intent intent =newIntent();

// com.android.browser/.BrowserActivity

intent.setClassName(“com.android.browser”,”com.android.browser.BrowserActivity”);

Intent.setdata(uri);

推广自己产品的操作,先物色手机里是还是不是切合这几个action的activity,倘诺没有就提醒用户是不是下载自己的成品:

queryIntentActivity();

33.对android主线程的应用和领会

四大组件都是维护在主线程里

系统事件:低电量广播,sd卡挂载广播也是主线程来保证的。

主ui线程无法进行耗时的操作,不然会报anr相当

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

Android虚拟机很小,空间很小,谈谈移动装备的虚拟机的大大小小限制 默许 16M

出于各类应用所能使用的默许内存大小是16M,所有可以谈谈加载图片的时候怎么处理大图片的?

动用BitMap来对图片举行缩放。如何是好***

垃圾回收,没有引用的目的(对象=null),或者是离开效率空间(局部变量),在某个时刻会被系统gc掉.

System.gc(); 突显文告系统是回收废料,不是当时去实践垃圾回收.

手机电视项目

获得300个频段图片( 30K)将图片给gallery
,由于图片过多,有的频道界面图片是白板.

急需在gallery 彰显图标的activity的ondestory中调用gc();回收图片资源

35.Framework做事办法及原理,Activity是哪些生成一个view的,机制是哪些。

反射 , 配置文件
(所有框架都是那俩结合,框架工作规律,读取配置文件,实例化对象,调用对象中的方法)

万般的情况:

Activity成立一个view是经过 ondraw 画出来的,
画那个view以前呢,还会调用onmeasure方法来统计突显的大小.

复杂气象:

Surfaceview直接操作硬件子类:opengl .GLSurfaceView

她会将显卡缓存里的内容显示到界面上。

那般速度会相比快,游戏支付常常用到。

MediaPlayer、OpenGL,直接将数据写到显存里,显卡获取显存内容进行浮现。

36. android我的一对限制,比如apk包大小限制,读取大文件时的时光限。

以此标题问的有标题, apk包大小限制不佳说,这么些是基于手机硬件而定的。

极品飞车有100M 还是可以装到手机上,

// apk 资源文件素材.

场景上的大程序主程序 很小 5~10M

材料存放在服务器上(也足以下载到sdcard上).如游戏程序.

读大文件的小时范围应该是main线程里面的时间限制5秒.

Service阻塞时间毫无跨越 20m

Broadcast 10m

37.怎么着加载的音乐新闻,怎么样创新其功能。

遍历sdcard所有的mp4音信会比较慢,

Mp3 作者音讯 专辑 图片 歌词音信

Android提供mediascanner,mediaStore等接口,
音乐文件的音信都会存放到系统的数据库表中,我们可以通过content
provider获取音乐音信

何以立异功能(界面突显),是个科普难点, 能够从以下多少个地点回应,

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

Java虚拟机,目的,加速java程序执行速度

先行加载一些 都会的接纳的大的class的字节码, 提前加载.

光阴换时间

空间换时间

38. ListView如何升高其成效?

复用convertview , 历史的view对象

异步加载数据,分页加载数据, onscollLinster();

使用Static class ViewHolder

应用静态的view对象 幸免创立过多的view.

也得以把下载后的多寡缓存到数据库里

经过客户端和服务器 协同 作战 来贯彻优化。

图形缓存,检测图片是不是失效

通过Http 请求

If-modify-since : 检查数据是还是不是更新借使是302 拿缓存

39.启动应用后,改变系统语言,应用的语言会改变么?

会,老版本sdk不会,新版本会

40.开行一个主次,可以主界面点击图标进入,也可以从一个程序中跳转过去,二者有啥分别?

如果在主界面点击图片进入应用程序,则会依照activity在manifest里面的布置,那么些activity可能会放在分歧的task栈里面

而经过intent跳转:则基于intent的安装来判断是还是不是位于新的天职栈里,即使flag为flag_new_task
,就会放在新的天职栈里。

Receiver、service没有职分栈,如若想启动一个activity,就必要指定flag

41. Android程序与Java程序的分别?

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

Android SDK引用了多数的Java SDK,少数局地被Android
SDK放任,比如说界面部分,java.awtswing除了java.awt.font被引述外,其余都被撇下,在Android平台支付中不可以接纳。

android sdk 还添加了开源工程: httpclient , pullopenGL

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

AndroidSDK 与Java SDK的区分是很要求注意的地方。

所有的界面的始末,都需求重写,只好保留业务逻辑相关的情节。

1.6的 不帮助httpClient的last-modified信息的拍卖

42.Android中Task职分栈的分红。

假设有四个Activity A B
C,A跳到B,然后B跳到C,现在急需从C跳到A怎样传递数据而且使功能最高呢?

首先大家来看下Task的概念,Google是这么定义Task的:a task is what the
user experiences as an “application.” It’s a group of related
activities, arranged in a stack. A task is a stack of activities, not a
class or an element in the manifest file.
那意味就是说Task实际上是一个Activity栈,日常用户感受的一个Application就是一个Task。从那些定义来看,Task跟瑟维斯或者其他Components是尚未任何关系的,它只是指向Activity而言的。

Activity有例外的启动形式, 可以影响到task的分配

Task,简单来讲,就是一组以栈的方式聚集在一块儿的Activity组件集合。它们有秘密的上下驱关联,新插足的Activity组件,位于栈顶,并仅有在栈顶的Activity,才会有时机与用户举办互相。而当栈顶的Activity落成职务退出的时候,Task会将其退栈,并让下一个将跑到栈顶的Activity来于用户面对面,直至栈中再无越来越多Activity,Task为止。

如上表所示,是一个实例。从用户从进入邮箱开首,到还原完结,退出应用整个经过的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
(根据职能拆分,然后搞一个主界面,调用每个作用,然后每个作用的apk的activity都急需在平等的职分栈内运行,那时就需求接纳姻缘关系。)

●Activity的android:taskAffinity=“”属性 姻缘关系Affinity

1.布署后 当启动那些activity时就先去找有没有activity的亲和力属性相同
有就加盟这几个activity所在的天职中绝非就新开义务

2.affinity起功用须要的规格 必须有所以下任意一个:

1.intent包含FLAG_ACTIVITY_NEW_TASK标记

2.activity元素启用了allowTaskReparenting属性. True(允许义务栈
重定父级)

43.在Android中,怎么节外省存的运用,怎么主动回收内存?

尽可能多应用其中类 升高程序效能

Bean的字段可以不要 private,直接行使public

回收已经应用的资源,

创制的行使缓存

合理设置变量的功效范围

当仁不让回收:以后的某一段时间执行

System.gc();

44.不等工程中的方法是或不是可以互相调用?

能够,列举aidl访问远程服务的例子.***

45.在Android中是什么兑现判断区分电话的情事,去电,来电、未接来电?

Day8 showAddressService.java***

未接来电:是有raning状态向来到idle状态,大家得以记录那俩状态的时刻,若是时间间隔过短,就印证是未接。

46. dvm的进度和Linux的进度,应用程序的经过是或不是为同一个定义

Dvm的进程是dalivk虚拟机进度,每个android程序都运行在自己的进度之中,

各样android程序系统都会给他分配一个独自的liunxuid(user id),

各种dvm都是linux里面的一个进程.所以说那八个进程是一个进度.

47. sim卡的EF文件有啥意义 (百度)

Sim卡相关的事物,没接触过

文本规范.

碰着新的知识点,没接触过,可是空着。

大家可以答,通过阅读EF相关文档,可以拥有明白。

48.如何判断是不是有SD存储卡?

安排文件中有sd卡的权杖, 通过environment的静态方法,

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

49.嵌入式操作系统内存管理有哪三种, 各有什么特征。

内存管理:页式,段式,段页式。

将内存以分化方法,划分成几何份,那样方便管理。

断式分隔,有一块总的汇总索引表,先物色索引,在寻觅具体哪一块。每一块内有着可能大小不平等。

段需求记录内存空间的引用。消耗了必然空间

页通过测算的不二法门,去稳定一定的内存空间。

50.什么样是嵌入式实时操作系统, Android操作系统属于实时操作系统吗?

实时操作系统是指当外界事件或数额暴发时,可以承受并以丰盛快的快慢予以拍卖,其处理的结果又能在确定的小时之内来支配生育进度或对处理连串作出连忙响应,并操纵所有实时职务协调一致运行的嵌入式操作系统。紧要用以工业控制、军事设备、航空航天等世界对系统的响应时间有苛刻的要求,那就要求选取实时系统。又可分为软实时和健康时二种,而android是基于linux内核的,因而属于软实时。

实时操作系统:能够高效响应操作的种类,windows、linux都是。

实时操作系统的法则:

年富力强时. 军工系统,金星探测车( Vxworks操作系统)
(一旦有一个事变爆发,我当时放下所有的政工去实践事件)

软实时.调度算法(当一个轩然大波时有暴发时,依照算法来判定要隔多久执行),我们用的相似的连串都是软实时的。

51.一条最长的短信息约占多少byte?

一般情形下是华语70字符(包罗标点),英文160个字节

可是依据手机制式运营商的例外,短信长度也不比

做试验,看divideMessage方法的源码

她会判定,手机互联网制式去做限定。

52. Linux中跨进度通讯的二种艺术 。**

linux编程:先理解多少个概念。

# 管道( pipe
):管道是一种半双工的通讯格局,数据只好单向流动,而且不得不在颇具亲缘关系的进度间使用。进程的情深意重关系一般是指父子进度关系。

# 盛名管道 (named pipe) :
闻名管道也是半双工的通讯格局,然则它同意无亲缘关系进程间的通讯。

# 信号量( semophore ) :
信号量是一个计数器,可以用来支配两个经过对共享资源的走访。它常作为一种锁机制,幸免某经过正在访问共享资源时,其余进度也访问该资源。因而,首要用作进程间以及同样进度内不一样线程之间的联合手段。

# 音信队列( message queue ) :
音讯队列是由新闻的链表,存放在基础中并由新闻队列标识符标识。音信队列制伏了信号传递信息少、管道只可以承载无格式字节流以及缓冲区大小受限等缺陷。

# 信号 ( sinal ) :
信号是一种相比较复杂的通讯格局,用于文告接收进度某个事件已经产生。

# 共享内存( shared memory )
:共享内存就是炫耀一段能被别的过程所走访的内存,那段共享内存由一个经过成立,但七个进程都得以访问。共享内存是最快的
IPC
情势,它是本着其余进度间通讯格局运行功用低而特意布署的。它往往与任何通讯机制,如信号两,同盟使用,来已毕进程间的同步和通讯。

# 套接字( socket ) :
套解口也是一种进程间通讯机制,与其余通信机制差其余是,它可用于差别及内部的历程通讯。

53.谈谈对Android NDK的理解。

NDK:native develop kit只是一个陆续编译的工具,调用C代码。

1.怎么样时候用ndk,实时性要求高,游戏,图形渲染

opencv (人脸识别) , ffmpeg , rmvbmp4 avi 高清解码. ffmpeg, opencore.

2.为啥用ndk,ndk的优点 ,缺点,

亮点:功效相比高,复用c代码

症结:代码编写比较费心,难点糟糕解决

再介绍大家项目中那么些地点用到了ndk, c opengl?**

54.谈谈Android的长处和不足之处。不懂技术的人会问。

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

2、挣脱运营商束缚

3、丰富的硬件接纳 mtk android

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

5、无缝结合的谷歌(Google)应用

症结也有5处:

1、安全难点、隐衷问题

2、卖手机的不是最大运营商

3、运营商对Android手机照旧有影响

4、山寨化严重

5、过分看重开发商,缺少标准配置 版本过多

55.
Android系统中GC什么意况下会产出内存走漏呢?视频编解码/内存败露
检测内存败露工具**

以致内存泄漏首要的原因是,先前报名了内存空间而淡忘了自由。倘若程序中存在对无用对象的引用,那么那一个目的就会驻留内存,消耗内存,因为不能让垃圾回收器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 内存败露的根本原因就是保存了无法再被访问的变量类型的引用

Jni开发,可能出现内存走漏:

C代码申请内存,可是从未自由。

公司里 有可能应用内存检测工具:读取源代码,看是或不是有=null的靶子

56. Android UI中的View怎么着刷新。

在主线程中得到view调用Invalidate()方法,查看画画板里面更新imageview的措施

在子线程里面可以通过postInvalidate ()方法;

iv.invalidate();

newThread(){

publicvoidrun(){

iv.postInvalidate();

}

}.start();

57.不难描述下Android数字签名。

Android 数字签名:私有签名**

在Android系统中,所有安装到系统的应用程序都必有一个数字证书,此数字证书用于标识应用程序的作者和在应用程序之间建立信任关系

Android系统须求每一个设置进系统的应用程序都是透过数字证书签名的,数字证书的私钥则保存在程序开发者的手中。Android将数字证书用来标识应用程序的小编和在应用程序之间确立信任关系,不是用来支配最后用户可以安装哪些应用程序。

其一数字证书并不须要权威的数字证书签名机构作证(CA),它只是用来让应用程序包自我认证的。

同一个开发者的多个程序尽可能使用同一个数字证书,那足以带来以下好处。

(1)有利于程序升级,当新版程序和旧版程序的数字证书相同时,Android系统才会以为那八个程序是同一个先后的不比版本。倘诺新版程序和旧版程序的数字证书不等同,则Android系统认为她们是见仁见智的主次,并发出争论,会要求新程序更改包名。

(2)有利于程序的模块化设计和支付。Android系统允许具备同一个数字签名的程序运行在一个进程中,Android程序会将他们身为同一个主次。所以开发者可以将自己的顺序分模块开发,而用户只须求在急需的时候下载适当的模块。

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

(1)数字证书的有效期要包蕴程序的揣摸生命周期,一旦数字证书失效,持有改数字证书的先后将不可能正常升级。

(2)如若四个程序行使同一个数字证书,则该数字证书的有效期要包涵所有程序的推测生命周期。

(3)Android
马克et强制须求所有应用程序数字证书的有效期要时时刻刻到2033年二月22日未来。

Android数字证书包罗以下多少个中央:

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

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

(3)如若要标准颁发一个Android
,必须运用一个适宜的私钥生成的数字证书来给程序签名,而无法选用adt插件或者ant工具生成的调节证书来发表。

(4)数字证书都是有有效期的,Android只是在应用程序安装的时候才会检查注脚的有效期。若是程序已经设置在系统中,尽管证书过期也不会影响程序的正常职能。

58.什么是ANR如何幸免它?

在Android上,要是您的应用程序有一段时间响应不够灵活,系统会向用户显示一个会话框,这么些对话框称作应用程序无响应(ANR:Application
Not
Responding)对话框。用户可以挑选让程序继续运行,可是,他们在选择你的应用程序时,并不指望每一遍都要拍卖这么些对话框。由此,在先后里对响应品质的布置很关键,那样,系统不会突显ANR给用户。

Activity 5秒broadcast10秒

耗时的操作 worker thread里面落成,

处理形式:handler message…AsynsTask , intentservice.等…

59. 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动画,传统的动画片方法,通过逐一的广播排列好的图样来完毕,类似电影。

62.说说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中显得。

63.因而点击一个网页上的url就可以完结程序的活动安装,描述下原理

Android基础:Day11AddJavascriptInterface**

通过javascript调用java代码

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

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

65.java中的soft reference是个什么样东西

StrongReference 是 Java 的默许引用完结, 它会尽可能长日子的存活于 JVM
内, 当没有其余对象指向它时 GC 执行后将会被回收

SoftReference 会尽可能长的保留引用直到 JVM
内存不足时才会被回收(虚拟机有限支撑), 这一特点使得 SoftReference
万分适合内存缓存

66.udp总是和TCP的不相同之处

Tcp:就像是打电话,滑动窗口协议. 拥塞控制.

udp 不关切数据是不是达到,以数据包的款式传递。是或不是封堵

qq视频:

镜头优先. tcp

顺理成章优先udp

qq发信息:udp,不过有时会并发 某新闻未送达的唤醒,那是qq发音讯的同时,会等待回执音信(udp发送),若是接受到这么些音讯,就表明发送成功。

如若没有收受到,就印证发送战败,但奇迹对方接到了,却提示自己发送战败,原因是那几个回执音讯在殡葬进度中丢失了。

67. android开发中怎么去调试bug

逻辑错误

1.断点 debug

  1. logcat

界面布局错误,使用 hierarchyviewer.bat ,显示布局层级的工具

我们得以行使那个工具,去分析外人的界面,然后借鉴

68.service中间可以弹土司么

可以

69.写10个大致的linux命令

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

startup dhcp

chmod

70 .JNI调用常用的多个参数

JNIEnv *env, jobject javaThis记住即可

71.书写出android工程的目录结构

牢记即可:

src

android.jar

asset

res

gen

manifest

72. ddms和traceview的区别.

daivilk debug manager system

翻开进度、查看文件、模拟话机、短信,gps定位等等。

traceview 分析程序执行时间和成效代码优化时使用

选择手续:

1.在应用的主activity的onCreate方法中进入Debug.startMethodTracing(“xxx.trace”);

2.均等在主activity的onStop方法中到场Debug.stopMethodTracing();

3.还要要在AndroidManifest.xml文件中安插权力

3.再度编译,安装,启动服务,测试完了取对应的traceview文件(adb pull
/sdcard/xxxx.trace)。

4.一向在命令行输入traceview
xxxxtrace,弹出traceview窗口,分析对应的行使即可。

在那么些文件中,可以分析出具有代码执行过程中,cpu的消耗情形,占用时间。

店家常用素语:

KPI : key performance information : 关键质量目标:

目标:如splash界面不可以跨越5秒

从splash 界面加载mainactivity 不可能当先0.7秒

73.联袂异步的接头,什么是一块,什么是异步,多次调用异步方法会油然则生哪些难题.

联手就是您叫我去吃饭,我听见了就和你去吃饭;假如没有听到,你就不停的叫,直到自己告诉你听到了,才联合去吃饭。

异步就是你叫自己,然后自己去用餐,我获取信息后可能及时走,也恐怕等到下班才去吃饭。

所以,要本人请你吃饭就用一块的法子,要请我吃饭就用异步的办法,那样你可以省钱。

屡次调用异步方法:将来一段时间内,得到数十次响应

图片乱跳:**就是以此

以通信为例

一路:发送一个请求,等待重临,然后再发送下一个呼吁

异步:发送一个请求,不等待重临,随时可以再发送下一个伸手

并发:同时发送五个请求

74.利用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 first created. */

@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) {

DecimalFormat nf =newDecimalFormat(“0.00”);

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

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

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

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

doubleBMI = weight / (height * height);

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

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

// Give health advice

TextView fieldsuggest = (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) {

DecimalFormat nf =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)应该写在哪里,最后使保险和伸张代码变得尤为便于!

实际,重构很简短,通读代码,感觉哪边不太爽,就改那边吧!(我当下的感想)

一个不错的代码应该是能令人感觉到舒畅女士的!

总结:

有关项目

在就是您项目经验,一定要崛起你相逢哪些难题,然后是怎么化解的!把难点指导到您熟知的园地,或者知识点上,尽量将种种技能点细节显示出来,

心态:

哪些的面试官都有,去面试的时候要做好全方位心绪准备,不管是技巧或者基础都得扎实。一个人的攀谈能力也很重点,总而言之不是非凡规范的中文,
最起码你说的得令人家听得懂,而且得把面试官讲得至极彻底,那样你获取offer的机遇更大,谈薪资也有优势~~

发表评论

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