Android基础知识整理

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生命周期

  • 销毁,创建
  • 设置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对象

你可能感兴趣的:(Android基础知识整理)