1、请简述Activity的生命周期
答:onCreate(Bundle savedInstanceState)、onStart()、onResume()、onPause()、onStop()、onDestroy()、onRestart()
2、请简述service的生命周期?启动方式?有何区别?
答:通常有两种方式启动一个service,他们对service的生命周期是不一样的。
第一种方式:startService,service的生命周期onCreate()-->onStart()-->onDestroy()
服务停止的方式:service.stopService()
第二种方式:bindService,service的生命周期onCreate()-->onBind()-->onUnBind()-->onDestroy()
服务停止的方式:UnbindService()再stopService()
使用startService()方式启动服务,调用者服务之间没有关连,即时调用者退出了,服务仍然运行;使用bindService()方式启动服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止。
3、ANR产生的原因?如何避免?
答:由于主线程有很多事情要做,比如响应点击事件等,如果在主线程做了太多耗时的操作,则有可能引发ANR。
避免:尽量在耗时的操作放在子线程。
4、使用bitmap需要注意什么?
答:1)使用BitmapFactroy的decodeStream获取bitmap
2) 使用BitmapFactory.Options参数
a)Options.inSampleSize,成比例放缩
b)Options.inJustDecodeBounds,只获取长宽,不获取图片
c)Options.isPreferredConfig,修改图片编码格式
3)手动回收Bitmap
5、service和thread的区别?
答:1)Service是系统的四大组件之一,Thread只是用来一个执行后台任务的工具类
2)service可以设置独立进程;thread不可以,只能存在于进程中。
3)service有自己的生命周期。如果已bind的方式启动,生命周期和activity相同。如果以start方式启动,不调用stop方法,会一直在后台运行。thread运行完了就结束了,启动后跟activity没有关系了,哪怕activity结束了,thread也会在后台运行。
4)不同的Activity可以调用同一个service,不同的Activity不能调用同一个thread
5)service中可以创建线程,避免ANR
6、进程和线程的区别?
答:线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程比进程更小,基本上不拥有系统资源,故对它调度使用资源小,能更高效的提高系统内多个程序间并发执行的。
进程是系统进行资源分配和调度的独立单位。可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。
区别:1)线程上下文切换比进程上下文切换快得多。
2)进程间相互独立,同一进程的各线程间共享。