接着上一篇 Android 面试题(二) 继续
1、横竖屏切换时候Activity的生命周期
这个生命周期跟清单文件里的配置有关系
1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期
默认首先销毁当前activity,然后重新加载
2、设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法
游戏开发中, 屏幕的朝向都是写死的.
2、service是否在main thread中执行, service里面是否能执行耗时的操作?
默认情况,如果没有显示的指定service所运行的进程, Service和activity是运行在当前app所在进程的main thread(UI主线程)里面
service里面不能执行耗时的操作(网络请求,拷贝数据库,大文件 )
在子线程中执行 new Thread(){}.start();
特殊情况 ,可以在清单文件配置 service 执行所在的进程 ,让service在另外的进程中执行
3、两个Activity之间怎么传递数据?
基本数据类型可以通过. Intent 传递数据
在A activity中
Intent intent = new Intent();
intent.putExtra(name,value)
Bundlebundle = new Bundle();
bundle.putBoolean(key,value);
intent.putExtras(bundle);
extras.putDouble(key, value)
// 通过intentputExtra 方法基本数据类型都传递
Intenti = getIntent();
i.getExtras();
intent.getStringExtra("key","value");
intent.getBooleanExtra("key","value")
Bundlebundle = new Bundle();
bumdle.putShort(key,value);
intent.putExtras(bumdle);
intent.putExtras(bundle)
4、同一个程序,不同的Activity是否可以放在不同的Task任务栈中?
比方说在激活一个新的activity时候, 给intent设置flag
Intent的flag添加FLAG_ACTIVITY_NEW_TASK
这个被激活的activity就会在新的task栈里面…
Intentintent = new Intent(A.this,B.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
5、请介绍下Android中常用的五种布局。
FrameLayout(帧布局),LinearLayout (线性布局),AbsoluteLayout(绝对布局),RelativeLayout(相对布局),TableLayout(表格布局)
6、为什么要用ContentProvider?它和sql的实现上有什么差别?
屏蔽数据存储的细节,对用户透明,用户只需要关心操作数据的uri就可以了
不同app之间共享,操作数据
Sql也有增删改查的方法.
但是contentprovider还可以去增删改查本地文件. xml文件的读取,更改,
网络数据读取更改
7、Intent传递数据时,可以传递哪些类型数据?
1.一般的基本数据类型 Intent .putextra() intent.getextra();
ParselableSerializable
2.数据的uri, intent.setData() intent.getData();
8、什么是IntentService?有何优点?
普通的service ,默认运行在ui main 主线程
Sdk给我们提供的方便的,带有异步处理的service类,
可以在OnHandleIntent() 处理耗时的操作
9、谈谈UI中, Padding和Margin有什么区别?
Padding 文字对边框, margin是控件对父窗体.
Padding 盒子里面的内容距离盒子的距离 , margin 盒子与盒子之间的距离
10、系统上安装了多种浏览器,能否指定某浏览器访问指定页面?
找到对应的浏览器的意图,传递数据URI , 激活这个意图
Intent intent = new Intent();
intent.setClassName(packageName, className);
startActivty(intent);