码迷,mamicode.com
首页 > 移动开发 > 详细

基础4 Android基础

时间:2016-01-04 11:43:17      阅读:480      评论:0      收藏:0      [点我收藏+]

标签:

基础4 Android基础

1. Activity与Fragment的生命周期。

技术分享

Activity生命周期

  打开应用 onCreate()->onStart()->onResume

  按BACK键 onPause()->onStop()->onDestory()

  按HOME键 onPause()->onStop()

  再次启动 onRestart()->onStart()->onResume()

技术分享

技术分享

Fragment的生命周期

  切换到该Fragment onAttach() onCreate() onCreateView() onActivityCreated() onStart() onResume()

  屏幕灭掉 onPause() onSaveInstanceState() onStop()

  屏幕解锁 onStart() onResume()

  切换到其他Fragment onPause() onStop() onDestroyView()

  切换回本身的Fragment onCreateView() onActivityCreated() onStart() onResume()

  回到桌面 onPause() onSaveInstanceState() onStop()

  回到应用 onStart() onResume()

  退出应用 onPause() onStop() onDestroyView() onDestroy() onDetach()

 

2. Acitivty的四中启动模式与特点。

  当应用运行起来后就会开启一条线程,线程中会运行一个任务栈,当Activity实例创建后就会放入任务栈中 Activity启动模式的设置在AndroidManifest.xml文件中,通过配置Activity的属性android:launchMode=""设置

  Standard模式(默认) 只要你创建了Activity实例,一旦激活该Activity,则会向任务栈中加入新创建的实例,退出Activity则会在任务栈中销毁该实例

  SingleTop模式 考虑当前要激活的Activity实例在任务栈中是否正处于栈顶,如果处于栈顶则无需重新创建新的实例,会重用已存在的实例,否则会在任务栈中创建新的实例

  SingleTask模式 如果任务栈中存在该模式的Activity实例,则把栈中该实例以上的Activity实例全部移除,调用该实例的newInstance()方法重用该Activity,使该实例处於栈顶位置,否则就重新创建一个新的Activity实例

  SingleInstance模式 当该模式Activity实例在任务栈中创建后,只要该实例还在任务栈中,即只要激活的是该类型的Activity,都会通过调用实例的newInstance()方法重用该Activity,

    此时使用的都是同一个Activity实例,它都会处于任务栈的栈顶。  此模式一般用于加载较慢的,比较耗性能且不需要每次都重新创建的Activity

 

3. Activity缓存方法。

  onSaveInstanceState() 和 onRestoreInstanceState()不属于Activity的生命周期,只有意外销毁一个Activity时才被调用,

  如内存不足,按下了HOME键(注:按下BACK键则是主动销毁一个Activity,这两个方法不会被调用)。当需要改变屏幕方向时,也可以用这两个方法来暂存一些数据。

 下面百度地图应用中的例子,就用到了这两种方法,用来保存和恢复地图的视图。

@Override
protected void onSaveInstanceState(Bundle outState) {
 cPoint = mapView.getMapCenter(); //得到当前MapView的中心点。
 outState.putInt("lat", cPoint.getLatitudeE6()); //暂存在outState中
 outState.putInt("lon", cPoint.getLongitudeE6());
 super.onSaveInstanceState(outState);
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
 int lat = savedInstanceState.getInt("lat"); //从保存的数据中恢复
 int lon = savedInstanceState.getInt("lon");
 cPoint = new GeoPoint(lat, lon);
 super.onRestoreInstanceState(savedInstanceState);
}

 

4. Service的生命周期,两种启动方法,有什么区别。  

  startService  访问者退出 Service仍然允许 onCreate onStartCommand onDestroy  

  bindService  访问者退出 Service终止onCreate onBind onUnbind onDestroy

 

5. 怎么保证service不被杀死。

  1 onStartCommand方法,返回START_STICKY

  2 提升service优先级 android:priority = "1000"

  3 提升service进程优先级

  4 onDestroy方法里重启service

 

6. 广播的两种注册方法,有什么区别。

  1.在AndroidManifest.xml文件中注册。

  好处:一旦应用程序被安装到手机里,BroadCast Receiver就开始生效。 无论应用程序进程是否运行,运用程序是否在开启状态下都可以接受到广播事件

  <receiver android:name=".receiver.SMSReceiver" >

      <intent-filter android:priority="1000" >

         <action android:name="android.provider.Telephony.SMS_RECEIVED" />

      </intent-filter> </receiver>

  2.通过代码的方式注册广播 好处:一旦运用程序停止,广播也跟着停止

  IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF);

  filter.setPriority(1000);

  LockScreenReceiver myReceiver = new LockScreenReceiver();

  registerReceiver(myReceiver, filter);

 

7. Intent的使用方法,可以传递哪些数据类型。

  putExtra()

  基本数据类型 boolean byte char short int long float double

  String CharSequence Parcelable Serializable Bundle 数组 集合

 

8. ContentProvider使用方法。

增删改查

ContentResolver resolver =  getContentResolver();
Uri uri = Uri.parse("content://media/internal/images");
//添加一条记录
ContentValues values = new ContentValues();
values.put("name", "linjiqin");
values.put("age", 25);
resolver.insert(uri, values);  
//获取person表中所有记录
Cursor cursor = resolver.query(uri, null, null, null, null);
while(cursor.moveToNext()){
   
}
//把id为1的记录的name字段值更改新为zhangsan
ContentValues updateValues = new ContentValues();
updateValues.put("name", "zhangsan");
Uri updateIdUri = ContentUris.withAppendedId(uri, 2);
resolver.update(updateIdUri, updateValues, null, null);
//删除id为2的记录
Uri deleteIdUri = ContentUris.withAppendedId(uri, 2);
resolver.delete(deleteIdUri, null, null);

 

9. Thread、AsycTask、IntentService的使用场景与特点。

 

10. 五种布局: FrameLayout 、 LinearLayout 、 AbsoluteLayout 、 RelativeLayout 、 TableLayout 各自特点及绘制效率对比。

 

11. Android的数据存储形式。

 

12. Sqlite的基本操作。

 

13. Android中的MVC模式。

 

14. Merge、ViewStub的作用。

 

15. Json有什么优劣势。

 

16. 动画有哪两类,各有什么特点?

 

17. Handler、Loop消息队列模型,各部分的作用。

 

18. 怎样退出终止App。

 

19. Asset目录与res目录的区别。

 

20. Android怎么加速启动Activity。

 

21. Android内存优化方法:ListView优化,及时关闭资源,图片缓存等等。

 

22. Android中弱引用与软引用的应用场景。

 

23. Bitmap的四中属性,与每种属性队形的大小。

 

24. View与View Group分类。自定义View过程:onMeasure()、onLayout()、onDraw()。

 

25. Touch事件分发机制。

 

26. Android长连接,怎么处理心跳机制。

 

27. Zygote的启动过程。

 

28. Android IPC:Binder原理。

 

29. 你用过什么框架,是否看过源码,是否知道底层原理。

 

30. Android5.0、6.0新特性。

 

Android的话,多是一些项目中的实践,使用多了,自然就知道了,还有就是多逛逛一些名人的博客,书上能讲到的东西不多。另外android底层的东西,有时间的话可以多了解一下,加分项。

 

推荐书籍:《疯狂android讲义》《深入理解android》

 

基础4 Android基础

标签:

原文地址:http://www.cnblogs.com/huanyi0723/p/5098185.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!