1. 什么是Activity?
通俗的讲,Activity就是一个应用程序的门面,也可以理解成就是WEB程序中一个页面,当然与web程序中的页面不同的是,web中的一个页面可能只是一个纯粹的展示页面不与用户进行任何交互,而几乎所有的Activity都会与用户交互。当然两者在架构上也有本质区别,Activity与用户的交互通过触发UI的不同事件完成的。而Web程序是通过请求,响应来完成交互的。还有在android中颠覆了很多常规想法,比如在一个Activity中可以打开另一个不在同一应用的Activity。这在其他程序是不可想象的。当然这种设计的出发点也是为了节省系统资源。从View层的角度来看,Activity承载了与用户交互的不同控件。从控制层看,也就是内部逻辑,Activity需要保持各个界面的状态,背后会做很多持久化的操作。包括妥善管理生命周期的各个阶段。 2.
请描述一下Activity生命周期。
创建 onCreate - 启动onStart – 开始 onResume – 暂停 onPause – 结束 onStop – 销毁onDestroy
在一个Activity正常启动的过程中,他们被调用的顺序是 onCreate -> onStart -> onResume, 在Activity被干掉的时候顺序是onPause -> onStop -> onDestroy ,这样就是一个完整的生命周期,但是有人问了,程序正运行着呢来电话了,这个程序咋办?中止了呗,如果中止的时候新出的一个Activity是全屏的那么:onPause->onStop ,恢复的时候onStart->onResume ,如果打断这个应用程序的是一个Theme为Translucent 或者Dialog 的Activity那么只是onPause ,恢复的时候onResume 。
3. 两个Activity之间跳转时必然会执行的是哪几个方法。
startActivity(Intent intent) ;
startActivityForResult (Intent intent, int requestCode) ;
onActivityResult (int requestCode, int resultCode, Intent data); setResult(int resultCode); 4.
横竖屏切换时候Activity的生命周期。
1). 不设置 Activity 的 android:configChanges 时 , 切屏会重新调用各个生命周期 , 切横屏时会执行一次 , 切竖屏时会执行两次 . 2). 设置 Activity 的 android:configChanges=”orientation” 时 , 切屏还是会重新调用各个生命周期 , 切横、竖屏时只会执行一次 . 3). 设置 Activity 的 android:configChanges=”orientation|keyboardHidden” 时 , 切屏不会重新调用各个生命周期 , 只会执行 onConfigurationChanged 方法 . 5.
全屏的 Activity
// 设置全屏模式
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); // 去除标题栏
requestWindowFeature(Window.FEATURE_NO_TITLE); 6.
如何将一个Activity设置成窗口的样式。
Activity属性设定:有时候会做个应用程序是漂浮在手机主界面的。这个只需要在设置下Activity的主题theme,即在Manifest.xml定义Activity的地方加一句: android :theme=\如果是作半透明的效果:
android:theme=\7.
Activity 中的对象的生命周期大于Activity?
调试方法: DDMS----> HEAPSIZE --->dataobject ---> [Total Size] 8.
你后台的Activity被系统 回收怎么办?
被回收的Activity就要重新调用onCreate()方法,不同于直接启动的是这回onCreate()里是带上参数 savedInstanceState,没被收回的就还是onResume就好了。 9.
如何退出Activity?如何安全退出已调用多个Activity的Application?
1、抛异常强制退出:
该方法通过抛异常,使程序Force Close。
验证可以,但是,需要解决的问题是,如何使程序结束掉,而不弹出Force Close的窗口。 2、记录打开的Activity:
每打开一个Activity,就记录下来。在需要退出时,关闭每一个Activity即可。 3、发送特定广播:
在需要结束应用时,发送一个特定的广播,每个Activity收到广播后,关闭即可。 4、递归退出
在打开新的Activity时使用startActivityForResult,然后自己加标志,在onActivityResult中处理,递归关闭。
10. 如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状
态?
android 系统会记录下回收前Activity 的状态,再次调用被回收的Activity 就要重新调用onCreate(),不同于直接启动的是这回onCreate()里包括参数savedInstanceState。 使用 savedInstanceState 可以恢复到回收前的状态。 11. 两个Activity之间怎么传递数据?
通过Intent来传递数据
12. 怎么让在启动一个Activity时就启动一个service?
在activity的onCreate里面进行连接并bindservice或者直接startService。 (服务里启动Activity
Intent intent = new Intent();
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setClass(getApplicationContext(),FileBrowserActivity.class); startActivity(intent);)
13. 同一个程序,但不同的Activity是否可以放在不同的Task任务栈中?
可以放在不同的Task中。需要为不同的activity 设置不同的taskaffinity 属性,启动activity 的Intent 需要包含FLAG_ACTIVITY_NEW_TASK标记
14. Activity怎么和service绑定,怎么在activity中启动自己对应的service? 15. 如何将SQLite数据库(.db文件)与apk文件一起发布?
可以将.db文件复制到Eclipse Android工程中的res aw目录中。所有在res aw目录中的文件不会被压缩,这样可以直接提取该目录中的文件。可以将.db文件复制到res aw目录中
16. 什么是Service以及描述下它的生命周期。
当需要创建在后台运行的程序的时候,就要使用到Service . 17. Service有哪些启动方法,有什么区别,怎样停用Service?
startService
Service会经历 onCreate 到onStart,然后处于运行状态,stopService的时候调用onDestroy方法。 bindService
Service会运行onCreate,然后是调用onBind, 这个时候调用者和Service绑定在一起。调用者退出了,Srevice就会调用onUnbind->onDestroyed方法。
所谓绑定在一起就共存亡了。调用者也可以通过调用unbindService方法来停止服务,这时候Srevice就会调用onUnbind->onDestroyed方法。
如果是调用者自己直接退出而没有调用stopService的话,Service会一直在后台运行 18. 不用service,B页面为音乐播放,从A跳转到B,再返回,如何使音乐继续播放? 19. View如何刷新?
View 可以调用invalidate()和postInvalidate()这两个方法刷新 20. 什么是IntentService?有何优点?
IntentService是一个通过Context.startService(Intent)启动可以处理异步请求的Service,使用时你只需要继承IntentService和重写其中的onHandleIntent(Intent)方法接收一个Intent对象,在适当的时候会停止自己(一般在工作完成的时候). 所有的请求的处理都在一个工作线程中完成,它们会交替执行(但不会阻塞主线程的执行),一次只能执行一个请求。
优点:IntentService使用队列的方式将请求的Intent加入队列,然后开启一个worker thread(线程)来处理队列中的Intent,对于异步的startService请求,IntentService会处理完成一个之后再处理第二个,每一个请求都会在一个单独的worker thread中处理,不会阻塞应用程序的主线程,这里就给我们提供了一个思路,如果有耗时的操作与其在Service里面开启新线程还不如使用IntentService来处理耗时操作。 21. 请描述一下Intent 和 Intent Filter。
Intent 在Android 中被翻译为\意图\也就是目的,它们是应用程序四种基本组件——————activity,service和broadcast receiver 之间互相激活的手段。在调用
Intent 名称时使用结构全名时为显示调用。这种方式一般用于应用程序的内部调用,因为你不一定会知道别人写的类的全名。关于隐式Intent 的用法,这里有配置Activity 的Intent Filter
在调用的时候指定Intent 的action,系统就会自动的去对比是哪个 intent-filter 符合相应的Activity,找到后就会启动Activity.
一个intent filter 是 IntentFilter 类的实例,但是它一般不出现在代码中,而是出现在androidManifest.xml文件中,以 的形式(有一个例外是broadcast receiver 的intent filter 是使用Context.registerReceiver() 来动态设定的,其intent filter 也是在代码中创建的。)
一个filter 有action,data,category等字段.一个隐式intent 为了能被某个intent filter 接受,必须通过3个测试,一个intent 为了被某个组件接受,则必须通过它所有的intent filter 中的一个。
22. Intent传递数据时,可以传递哪些类型数据?
Serializable、Charsequence、Parcelable、Bundle 23. 说说Activity,Intent,Service是什么关系 。
一个 Activity 通常是一个单独的屏幕,每一个Activity 都被实现为一个单独的类,这些类都是从Activity 基类中继承来的,Activity 类会显示由视图控件组成的用户接口,并对视图控件的事件做出响应。
Intent 的调用是用业进行架构屏幕之间的切换的,Intent 是描述应用想要做什么。Intent 数据结构中两个最重要的部分是动作和动作对应的数据,一个动作对应一个动作数据。
Android Service 是运行在后台的代码,不能与用户交互,可以运行在自己的进程,也可以运行在其他应用程序进程的上下文里。需要通过某一个Activity 或者其他 Context 对象来调用.
Activity 跳转到 Activity ,Activity 启动Service ,Service 打开Activity都需要Intent 表时跳转的意图,以及传递参灵敏,Intent 是这些组件间信号传递的承载者。 24. 请描述一下Broadcast Receiver。
广播接收器没有用户界面。然而,它们可以启动一个activity或serice 来响应它们收到的信息,或者用NotificationManager 来通知用户。分为两种一种是普通广播还有一种是有序广播。普通广播,通过Context.sendBroadcast(Intent myIntent)发送的 有序广播,通过Context.sendOrderedBroadcast(intent, receiverPermission)发送的,该方法第2个参数决定该广播的级别,级别数值是在 -1000 到 1000 之间 , 值越大 , 发送的优先级越高;
25. 在manifest和代码中如何注册和使 用 broadcast receiver 。
26. 动态绑定broadcast receiver。
动态注册,一般在Activity可交互时onResume()内注册BroadcastReceiver IntentFilter intentFilter=new
IntentFilter(\registerReceiver(mBatteryInfoReceiver ,intentFilter); 27. 请介绍下ContentProvider是如何实现数据共享的。
一个程序可以通过实现一个Content provider的抽象接口将自己的数据完全暴露出去,而且Content providers是以类似数据库中表的方式将数据暴露。Content providers存储和检索数据,通过它可以让所有的应用程序访问到,这也是应用程序之间唯一共享数据的方法。 要想使应用程序的数据公开化,可通过2种方法:创建一个属于你自己的Content provider或者将你的数据添加到一个已经存在的Content provider中,前提是有相同数据类型并且有写入Content provider的权限。 如何通过一套标准及统一的接口获取其他应用程序暴露的数据? Android提供了ContentResolver,外界的程序可以通过ContentResolver接口访问ContentProvider提供的数据。 28. 请介绍下Android的数据存储方式。
Sharedpreference、文件、SQLite、Contentprovider、网络 29. 为什么要用ContentProvider?它和sql的实现上有什么差别?
使用ContentProvider 可以将数据共享给其他应用,让除本应用之外的应用也可以访问本应用的数据。它的底层是用SQLite 数据库实现的,所以其对数据做的各种操作都是以Sql实现,只是在上层提供的是Uri 30. 请介绍下Android中常用的五种布局。
LinearLayout、FrameLayout、RelativeLayout、AbsoluteLayout、TableLayout 31. 谈谈UI中, Padding和Margin有什么区别? 32. 描述一下android的系统架构
android系统架构分从下往上为Linux内核层、运行库、应用程序框架层和应用程序层。 Linux内核层:负责硬件的驱动程序、网络、电源、系统安全以及内存管理等功能。