1.Activity
四大组件之一,一般,一个用户界面对应一个activity.
setContentView(); //要显示的布局
activity是context的子类,同时实现了window.callback和keyevent.callback,可以处理窗体用户交互的事件。
如果界面有共同的特点,可以自己定义一个BaseActivity.
2.描述 Activity的生命周期
生命周期描述的是一个类 从创建到 死亡(垃圾回收)的过程中会执行的方法。 在这个过程中,会针对不同的生命阶段调用不同的方法。
Activity从创建到销毁有多种状态,方法两两对应, onCreate()创建与onDestroy()销毁;onStart()可见与onStop()不可见; onResume()可交互(焦点)与onPause(); 剩下的onRestart(),是onStop()之后,没有onDestroy(),在再次启动Activity时调用。 之后是onStart() .可以在onStart()里面做刷新的操作,获取最新的数据。
可以在onStop()里做保存状态的设置,比如视频的声音设置,播放位置的记录。mediaplayer.pause();
然后在onStart()根据保存的状态恢复现场. mediaplayer.start();异常情况下销毁, 系统会调用onSaveInstanceState(),此时可以保存数据存入Bundle中。 当Activity重建时,会调用onRestoreInstanceState(),与之相对应可以拿出数据,不过onCreate()也可以拿到这个数据,所以使用onCreate()就可以。
横竖屏切换。
3.两个Activity之间跳转时必然会执行的是那些方法。
两个Activity是A,B, 方法调用顺序
A,onPause(),
B、 onCreate(), onStart(), onResume(),
A、onStop()
如果B是透明或对话框的话,不会调用onStop()方法
4.横竖屏切换时的Activity生命周期
android:configChanges="orientation | keyboardHidden | screenSize",
切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法,横屏一次,竖屏两次;
5.如何将一个Activity设置成窗口样式
方案A. 使用android的Dialoag主题
在AndroidManifest.xml中在需要显示为窗口的Activity中添加如下属性:
android:theme="@android:style/Theme.Dialog"
方案B,自定义主题
1. 在styles.xml文件中,可以新建如下的类似Dialog的style。
<style name=“Theme.FloatActivity” parent=“android:style/Theme.Dialog”> style>
2、在AndroidManifest.xml中在需要显示为窗口的Activity中添加如下属性: android: theme=“@style/Theme.FloatActivity”即可
6.如何退出Activity? 如何安全退出已调用多个Activity的Appliacation
退出activity, 直接调用finish();方法
安全结束进程 android.os.Process.killProcess(android.os.Process.myPid())
记录打开的Activity
List lists; 在application全集的环境里
lists=new ArrayList();
lists.add(this);
for(Activity activity: lists){
activity.finish;
}
lists.remove(this);
7.service是否在main thread中执行,service里面是否能执行耗时的操作
service运行在主线程,不能执行耗时操作,在子线程中执行。
Thread.currentThread().getName();
特殊情况,也可以新开进程 ,清单文件中定义android:process
8.一个应用可以有多个任务栈。
anroid:taskAffinity=""
9.Activity的flag
FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
不会出现在最近应用列表中
10.Activity怎么和service绑定,咋么在activity中启动自己对应的service
startService() 一旦被创建,调用者无关,没法使用service里面的方法
bindService() 一旦绑定,如调用者被销毁,service也会销毁
bindService() ,可以使用service里面的方法
bindService(), 需要参数ServiceConnection,新建该对象时使用IBinder作为桥梁进行交流。
11.什么是Service以及描述它的周期,Service有哪些启动方法,有设么区别,怎样停用Service?
service生命周期的方法,onCreate(),onStart(), onDestroy(), onBind()和onUnBind().
启动方式两种:
a. 通过startService()
会经历onCreate(),onStart(0,然后处于运行状态,stopService时调用onDestroy()方法
如果是调用自己直接退出而没有调用stopService(),Service会一直在后台运行
b. 通过bindService()
会经历onCreate(), onBind(), 此时service与调用者绑定在一起,调用者退出了, 会经历onUnBind(),onDestroy()方法。几个方法交织在一起时:
一个原则Service的onCreate()只会被调用一次
bindService之后,stopService是不会停止Service的,必须是Unbind
startService之后,多次调用startService(), 会多次调用 onStart()方法, stopService,只会调用一次 onDestroyed()方法。
12.IntentService
普通的service是运行在UI线程中。
IntentService,则会新开一个线程,必须有无参构造方法。
onHandleIntent()方法不在UI线程,可以做耗时操作。
13.社么时候用Service
拥有service进程具有较高的优先级
优先级顺序: 前台进程,可见进程,服务进程,后台进程,空startService服务进程
bindService 可见进程
startForeground(int , Notification), 前台进程
14.Intent 和 Intent Filter
Android通过Intent对象来表示一条消息,不仅包含消息的目的地,还包含消息的内容。对于Intent来说,目的地是必须的,而内容是可选项。通过Intent可以实现各种系统组件的调用与激活。
Intent Filter 包含三个参数来识别:
Action: 动作 ,用户定义的字符串,用于描述一个Android应用程序组件,一个Intent Filter可以包含多个Action
Data : 数据 uri
Category: 额外的附加消息. 类别匹配。
15.Intent传递数据,可以传递那些?
a. 传递一般数据类型, Intent.putextra() Intent.getextra()
b. 数据的uri, intent.getData() Intent.setData()
16.描述BroadcastReceiver
广播分为有序广播和无序广播
android:priority=”1000”
接收系统广播和自定义广播
可以作为组件间通信工具,EventBus
17.介绍android数据存储方式
文件
数据库
SharedPreference
18.介绍ContentProvider如何实现数据共享
把自己的数据通过uri的形式共享出去
android系统下不同程序 数据默认是不能共享访问的
继承ContentProvider
19.UI中,Padding和Margin的区别
Pading内边框 android:xxx
Margin外边框 android:latyou_xxx,都会封装到layoutParams中,和父控件相关
20.布局
新出的布局,PercentRelativeLayout,PercentFrameLayout.
可以说屏幕适配
21.在这个监听器中获得控件宽高
方式1 textView.getViewTreeObserver().addGlobalLayoutListener()
方式2 textView.post(new Runnabel(){
@Override
public void run(){
//此处得到控件宽高
textView.getHeight();
}
});
22.Android NDK的理解
native develop kit ,交叉编译的工具 .so
什么时候用ndk, 实时性要求高,游戏,图形渲染, opencv(人脸识别),ffmpeg
rmvb mp5 avi高清解码
ndk的优缺点,c不容易反编译。
23.Android系统中GC什么情况下会出现内存泄漏呢?
保存了不可能再被访问的的变量类型的引用
24.Android UI中的View如何刷新
在主线程中 拿到view调用 invalidate()方法
在线程中 可以通过 postInvalidate()方法
25.简介Android数字签名
Android系统要求所有的应用必须被证书进行数字签名之后才能进行安装。Android系统通过该证书来确认应用的作者,该证书是不需要权威机构认证的,一般情况下应用都是用开发者的自签名证书,该证书是确保应用程序和应用程序作者之间建立信任关系,而不是用来决定用户可以安装哪些应用程序。
keystore : 指定生成数字签名证书的文件名和路径。
alias:指定证书的别名。
keyalg:指定生成证书所需要的算法。
keysize:指定证书大小。
validity:指定证书的有效期,单位为天。
参考网址:http://blog.csdn.net/wzy_1988/article/details/50034711
26.什么是ANR,如何避免它?
Application Not Responding,应用程序无响应。
27.android动画有几类。
28.说说MVC模式
29.WebView详解
Android WebView在Android平台上是一个特殊的View, 他能用来显示网页,这个类可以被用来在你的app中仅仅显示一张在线的网页,还可以用来开发浏览器。WebView内部实现是采用渲染引擎来展示view的内容,提供网页前进后退,网页放大,缩小,搜索。
参考网址:http://blog.csdn.net/typename/article/details/39030091
30.udp连接和Tcp的不同之处
TCP,面向连接,建立一个可靠连接,三次握手
UDP,面向无连接,不关心数据是否达到,是否阻塞
TCP,画面优先
UDP,流畅优先,视频直播等
HTTP协议基于TCP
31.android开发中如何调试bug
适当地方,输出log
断点测试
lint工具
31.JNI调用常用的两个参数
JNIEnv *env 表示当前环境
jobject java对象