`
abc20899
  • 浏览: 911339 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

android基础面试

    博客分类:
  • java
 
阅读更多
一、Android进程的5个等级

1.Foreground Process 前台进程

Activity Resume()状态

Activity绑定Service,正在交互

Service生命周期正在被执行

BroadcastReceiver正在执行onReceive()



2.Visible Process   可见进程

Activity不在前端显示,但没有完全隐藏





3.Service Process    服务进程

正在运行,不在上述两种状态的Service



4.Background Process 后台进程

不可见状态



5.Empty Process      空进程



二、何为ANR,何时会产生ANR

1. 界面操作(按钮的点击)相应时间超过5秒

2.BroadcastReceiver执行超过10秒



三、如何防止ANR

将耗时操作在子线程中执行



四、Manifest文件的是什么时候加载的?

系统启动的时候 PackageManageService(系统级服务)读取Manifest信息,在系统级的共享内存中建立一信息库,可看作一张可供查询的数据库表

启动应用程序的时候,Launcher进行系统级判断,从信息库中查询Activity并进行实例化.并判断sdk版本



五、Manifest中定义的Activity,Service是什么时候实例化的?

startActivity() / 意图过滤

startService() bindService()





六、

Activity切换的时候如何保存状态?

正在短信的时候突然间来电话了需要保存

正在输入的时候切换屏幕需要保存



两个方法:

第一种方法:

系统在回收当前Activity之前会调用onSaveInstanceState()

按back不会调用此方法,按home键调用此方法

比如电话来了 一个操作打断了当前操作 当前操作由foreground变为background



重写

保存

onSaveInstanceState(Bundle outState){

    if(outState!=null){

        outState.putString(this.SAVE_INSTANCE_TAG,"hello");

    }

    super.

}

恢复:

onCreate(Bundle onSaveInstanceState){

    onSaveInstanceState.getString(this.SAVE_INSTANCE_TAG);

}



方法二、

在onPause()和onResume()中使用Perference保存





七、Android五种数据存储方式

SharedPreferences

文件

数据库

ContentProvider

网络存储数据



八、Service的生命周期?启动Service的方式有几种?



startService():

onCreate()

onStart()

onDestroy()

退出Activity服务仍在运行



bindService():

onCreate()

onBind()

onUnbind()

onDestroy()

Activity与Service绑定,共存亡。



九、Receiver的生命周期?广播注册的两种方法和区别?

生命周期:在onReceive()执行的时候期间。



两种方式:

一、代码动态注册

不是常驻型广播,广播跟随程序的生命周期



二、在AndroidManifest.xml中配置

常驻型,当应用关闭后,如果有广播,系统也会调用广播接受者



十、Activity的启动模式  <activity>中的launchMode属性

standard 调用一次startActivity()就产生一个新的实例

singleTop如果在栈顶,不产生新的实例,如果不在栈顶就产生新的实例



“standard”和”singleTop”可以被实例化多次,并且是可以存在于不同的task中;这种实例化时一个task可以包括一个activity的多个实例



singleTask在一个新的task中产生这个实例,不再产生新的实例

singleInstanceActivity实例所处的task中,只能有这个实例,不能有其他的实例



“singleTask”和”singleInstance”则限制只生成一个实例,并且是task的根元素。





十一、通过Intent传递二进制数据

1.实现Serializable接口

2.实现Parcelable接口



十二、Android程序的入口是application的main方法,从项目清单可以大概猜出



十三、

GC内存泄露

出现情况:

1.数据库的cursor没有关闭

2.构造adapter时,没有使用缓存contentview

   衍生listview的优化问题-----减少创建view的对象,充分使用contentview,可以使用一静态类来优化处理getview的过程/

3.Bitmap对象不使用时采用recycle()释放内存

4.activity中的对象的生命周期大于activity


Activity 与 Task的启动模式有哪些,它们含义具体是什么 ...

在一个Activity中,多次调用startActivity()来启动另一个Activity,要想只生成一个Activity实例,方法有两种。
方法一:设置 起动模式
一个Activity有四种启动模式:standard, singleTop, singleTask, singleInstance。
standard: 标准模式,一调用startActivity()方法就会产生一个新的实例。
singleTop: 如果已经有一个实例位于Activity栈的顶部时,就不产生新的实例,而只是调用Activity中的newInstance()方法。如果不位于栈顶,会产生一个新的实例。
singleTask: 会在一个新的task 中产生这个实例,以后每次调用都会使用这个,不会去产生新的实例了。
singleInstance: 这个跟singleTask基本上是一样,只有一个区别:在这个模式下的Activity实例所处的task 中,只能有这个activity实例,不能有其他的实例。
这些启动模式可以在功能 清单文件 中进行设置,<activity>中的launchMode属性。
"singleTask" and "singleInstance", should be used only when the activity has a MAIN and LAUNCHER filter.
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics