http://blog.csdn.net/superjunjin/article/details/7855995

16.Android常用控件的信息

单选框(RadioButton与RadioGroup):

RadioGroup用于对单选框进行分组,相同组内的单选框只有一个单选框被选中。

事件:setOnCheckedChangeListener(),处理单选框被选择事件。把RadioGroup.OnCheckedChangeListener实例作为参数传入。


多选框(CheckBox):

每个多选框都是独立的,可以通过迭代所有的多选框,然后根据其状态是否被选中在获取其值。

事件:setOnCheckedChangeListener(),处理多选框被选择事件。把CheckBox.OnCheckedChangeListener()实例作为参数传入。

下拉列表框(Spinner):

Spinner.getItemAtPosition(Spinner.getSelectedItemPosition());获取下拉列表框的值。

事件:setOnItemSelectedListener(),处理下拉列表框被选择事件把Spinner.OnItemSelectedListener()实例作为参数传入。

拖动条(SeekBar):

SeekBar.getProgress()获取拖动条当前值

事件:setOnSeekBarChangeListener(),处理拖动条值变化事件,把SeekBar.OnSeekBarChangeListener实例作为参数传入。

菜单(Menu):

重写Activity的onCreatOptionMenu(Menu menu)方法,该方法用于创建选项菜单,当用户按下手机的"Menu"按钮时就会显示创建好的菜单,在onCreatOptionMenu(Menu Menu)方法内部可以调用Menu.add()方法实现菜单的添加。

重写Activity的onMenuItemSelected()方法,该方法用于处理菜单被选择事件。

进度对话框(ProgressDialog):

创建并显示一个进度对话框:ProgressDialog.show(ProgressDialogActivity.this,"请稍等","数据正在加载中....",true);

设置对话框的风格:setProgressStyle()

ProgressDialog.STYLE_SPINNER  旋转进度条风格(为默认风格)

ProgressDialog.STYLE_HORIZONTAL 横向进度条风格

(补充)

下面是各种常用控件的事件监听的使用
①EditText(编辑框)的事件监听---OnKeyListener
②RadioGroup、RadioButton(单选按钮)的事件监听---OnCheckedChangeListener
③CheckBox(多选按钮)的事件监听---OnCheckedChangeListener
④Spinner(下拉列表)的事件监听---OnItemSelectedListener
⑤Menu(菜单)的事件处理---onMenuItemSelected
⑥Dialog(对话框)的事件监听---DialogInterface.OnClickListener()
http://www.iteye.com/topic/1060815

17.请介绍下Android中常用的五种布局

Android布局是应用界面开发的重要一环,在Android中,共有五种布局方式,分别是:FrameLayout(帧布局),LinearLayout (线性布局),

AbsoluteLayout(绝对布局),RelativeLayout(相对布局),TableLayout(表格布局)。

1.FrameLayout

这个布局可以看成是墙脚堆东西,有一个四方的矩形的左上角墙脚,我们放了第一个东西,要再放一个,那就在放在原来放的位置的上面,这样依次的放,会盖住原来的东西。这个布局比较简单,也只能放一点比较简单的东西。

2.LinearLayout

线性布局,这个东西,从外框上可以理解为一个div,他首先是一个一个从上往下罗列在屏幕上。每一个LinearLayout里面又可分为垂直布局 (android:orientation="vertical")和水平布局(android:orientation="horizontal" )。当垂直布局时,每一行就只有一个元素,多个元素依次垂直往下;水平布局时,只有一行,每一个元素依次向右排列。

LinearLayout中有一个重要的属性 android:layout_weight="1",这个weight在垂直布局时,代表行距;水平的时候代表列宽;weight值越大就越大。

3.AbsoluteLayout

绝对布局犹如div指定了absolute属性,用X,Y坐标来指定元素的位置android:layout_x="20px" android:layout_y="12px" 这种布局方式也比较简单,但是在垂直随便切换时,往往会出问题,而且多个元素的时候,计算比较麻烦。

4.RelativeLayout

相对布局可以理解为某一个元素为参照物,来定位的布局方式。主要属性有:

相对于某一个元素

android:layout_below="@id/aaa" 该元素在 id为aaa的下面

android:layout_toLeftOf="@id/bbb" 该元素在 id为bbb的左边

相对于父元素的地方

android:layout_alignParentLeft="true"  与父元素左对齐

android:layout_alignParentRight="true" 与父元素右对齐

还可以指定边距等,具体详见API

5.TableLayout

表格布局类似Html里面的Table。每一个TableLayout里面有表格行TableRow,TableRow里面可以具体定义每一个元素,设定他的对齐方式 android:gravity="" 。

每一个布局都有自己适合的方式,另外,这五个布局元素可以相互嵌套应用,做出美观的界面。

18.如何启用Service,如何停用Service

Android中的服务和windows中的服务是类似的东西,服务一般没有用户操作界面,它运行于系统中不容易被用户发觉,可以使用它开发如监控之类的程序。服务的开发比较简单,如下:

第一步:继承Service类

public class SMSService extends Service {

}

第二步:在AndroidManifest.xml文件中的<application>节点里对服务进行配置:

<service android:name=".SMSService" />

服务不能自己运行,需要通过调用Context.startService()或Context.bindService()方法启动服务。这两个方法都可以启动Service,但是它们的使用场合有所不同。使用startService()方法启用服务,调用者与服务之间没有关连,即使调用者退出了,服务仍然运行。使用bindService()方法启用服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止,大有“不求同时生,必须同时死”的特点。

如果打算采用Context.startService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onStart()方法。如果调用startService()方法前服务已经被创建,多次调用startService()方法并不会导致多次创建服务,但会导致多次调用onStart()方法。采用startService()方法启动的服务,只能调用Context.stopService()方法结束服务,服务结束时会调用onDestroy()方法。

如果打算采用Context.bindService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onBind()方法。这个时候调用者和服务绑定在一起,调用者退出了,系统就会先调用服务的onUnbind()方法,接着调用onDestroy()方法。如果调用bindService()方法前服务已经被绑定,多次调用bindService()方法并不会导致多次创建服务及绑定(也就是说onCreate()和onBind()方法并不会被多次调用)。如果调用者希望与正在绑定的服务解除绑定,可以调用unbindService()方法,调用该方法也会导致系统调用服务的onUnbind()-->onDestroy()方法。

服务常用生命周期回调方法如下:

onCreate() 该方法在服务被创建时调用,该方法只会被调用一次,无论调用多少次startService()或bindService()方法,服务也只被创建一次。

onDestroy()该方法在服务被终止时调用。

与采用Context.startService()方法启动服务有关的生命周期方法

onStart() 只有采用Context.startService()方法启动服务时才会回调该方法。该方法在服务开始运行时被调用。多次调用startService()方法尽管不会多次创建服务,但onStart() 方法会被多次调用。

与采用Context.bindService()方法启动服务有关的生命周期方法

onBind()只有采用Context.bindService()方法启动服务时才会回调该方法。该方法在调用者与服务绑定时被调用,当调用者与服务已经绑定,多次调用Context.bindService()方法并不会导致该方法onBind()被多次调用。

onUnbind()只有采用Context.bindService()方法启动服务时才会回调该方法。该方法在调用者与服务解除绑定时被调用

[java] view plaincopy
  1. 采用Context. bindService()方法启动服务的代码如下:
  2. public class HelloActivity extends Activity {
  3. ServiceConnection conn = new ServiceConnection() {
  4. public void onServiceConnected(ComponentName name, IBinder service) {
  5. }
  6. public void onServiceDisconnected(ComponentName name) {
  7. }
  8. };
  9. @Override
  10. public void onCreate(Bundle savedInstanceState) {
  11. Button button =(Button) this.findViewById(R.id.button);
  12. button.setOnClickListener(new View.OnClickListener(){
  13. public void onClick(View v) {
  14. Intent intent = new Intent(HelloActivity.this, SMSService.class);
  15. bindService(intent, conn, Context.BIND_AUTO_CREATE);
  16. //unbindService(conn);//解除绑定
  17. }});
  18. }
  19. }

19.ListView的优化方案

广播接收器只有一个回调方法:
void onReceive(Context curContext, Intent broadcastMsg)
当广播消息抵达接收器时,Android调用它的onReceive()方法并将包含消息的Intent对象传递给它。广播接收器仅在它执行这个方法时处于活跃状态。当onReceive()返回后,它即为失活状态。
拥有一个活跃状态的广播接收器的进程被保护起来而不会被杀死。但仅拥有失活状态组件的进程则会在其它进程需要它所占有的内存的时候随时被杀掉。
这种方式引出了一个问题:如果响应一个广播信息需要很长的一段时间,我们一般会将其纳入一个衍生的线程中去完成,而不是在主线程内完成它,从而保证用户交互过程的流畅。如果onReceive()衍生了一个线程并且返回,则包涵新线程在内的整个进程都被会判为失活状态(除非进程内的其它应用程序组件仍处于活跃状态),于是它就有可能被杀掉。这个问题的解决方法是令onReceive()启动一个新服务,并用其完成任务,于是系统就会知道进程中仍然在处理着工作。

21.设计模式和IoC(Inversion of Control 控制反转)

Android 框架魅力的源泉在于IoC,在开发Android 的过程中你会时刻感受到IoC 带来

的巨大方便,就拿Activity 来说,下面的函数是框架调用自动调用的:

protected void onCreate(Bundle savedInstanceState) ;

不是程序编写者主动去调用,反而是用户写的代码被框架调用,这也就反转

了!当然IoC 本身的内涵远远不止这些,但是从这个例子中也可以窥视出IoC

带来的巨大好处。此类的例子在Android 随处可见,例如说数据库的管理类,

例如说Android 中SAX 的Handler 的调用等。有时候,您甚至需要自己编写简

单的IoC 实现,上面展示的多线程现在就是一个说明

22.Android中的长度单位详解

现在这里介绍一下dp 和sp。dp 也就是dip。这个和sp 基本类似。如果设置表示长度、高度等属性时可以使用dp 或sp。但如果设置字体,需要使用sp。dp 是与密度无关,sp 除了与密度无关外,还与scale 无关。如果屏幕密度为160,这时dp 和sp 和px 是一样的。1dp=1sp=1px,但如果使用px 作单位,如果屏幕大小不变(假设还是3.2 寸),而屏幕密度变成了320。那么原来TextView 的宽度设成160px,在密度为320 的3.2 寸屏幕里看要比在密度为160 的3.2 寸屏幕上看短了一半。但如果设置成160dp 或160sp 的话。系统会自动将width 属性值设置成320px 的。也就是160 * 320 / 160。其中320 / 160 可称为密度比例因子。

也就是说,如果使用dp 和sp,系统会根据屏幕密度的变化自动进行转换。

下面看一下其他单位的含义

px:表示屏幕实际的象素。例如,320*480 的屏幕在横向有320个象素,

在纵向有480 个象素。

in:表示英寸,是屏幕的物理尺寸。每英寸等于2.54 厘米。例如,形容

手机屏幕大小,经常说,3.2(英)寸、3.5(英)寸、4(英)寸就是指这个

单位。这些尺寸是屏幕的对角线长度。如果手机的屏幕是3.2 英寸,表示手机

的屏幕(可视区域)对角线长度是3.2*2.54 = 8.128 厘米。读者可以去量

一量自己的手机屏幕,看和实际的尺寸是否一致。

23. 4种activity的启动模式

standard: 标准模式,一调用startActivity()方法就会产生一个新的实例。

singleTop: 如果已经有一个实例位于Activity栈的顶部时,就不产生新的实例,而只是调用Activity中的newInstance()方法。如果不位于栈顶,会产生一个新的实例。

singleTask: 会在一个新的task中产生这个实例,以后每次调用都会使用这个,不会去产生新的实例了。

singleInstance: 这个跟singleTask基本上是一样,只有一个区别:在这个模式下的Activity实例所处的task中,只能有这个activity实例,不能有其他的实例。

24.什么是ANR 如何避免它?

ANR:Application Not Responding。

在Android中,活动管理器和窗口管理器这两个系统服务负责监视应用程序的响应。当出现下列情况时,Android就会显示ANR对话框了:

  用户对应用程序的操作(如输入事件,按键、触摸屏事件)在5秒内无响应

  广播接受器(BroadcastReceiver)在10秒内仍未执行完毕

  Android应用程序完全运行在一个独立的线程中(例如main)。这就意味着,任何在主线程中运行的,需要消耗大量时间的操作都会引发ANR。因为此时,你的应用程序已经没有机会去响应输入事件和意向广播(Intent broadcast)。

避免方法:Activity应该在它的关键生命周期方法(如 onCreate()和onResume())里尽可能少的去做创建操作,

潜在的耗时操作。例如网络或数据库操作,或者高耗时的计算如改变位图尺寸,应该在子线程里(或者异步方式)来完成。

主线程应该为子线程提供一个Handler,以便完成时能够提交给主线程。

25.Android Intent的使用

在一个Android应用中,主要是由一些组件组成,(Activity,Service,ContentProvider,etc.)在这些组件之间的通讯中,由Intent协助完成。

正如网上一些人解析所说,Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。Intent在这里起着实现调用者与被调用者之间的解耦作用。
Intent传递过程中,要找到目标消费者(另一个Activity,IntentReceiver或Service),也就是Intent的响应者,有两种方法来匹配:
1,显示匹配(Explicit):

[java] view plaincopy
  1. public TestB extents Activity
  2. {
  3. .........
  4. };
  5. public class Test extends Activity
  6. {
  7. ......
  8. public void switchActivity()
  9. {
  10. Intent i = new Intent(Test.this, TestB.class);
  11. this.startActivity(i);
  12. }
  13. }

代码简洁明了,执行了switchActivity()函数,就会马上跳转到名为TestB的Activity中。

2,隐式匹配(Implicit):
   
  隐式匹配,首先要匹配Intent的几项值:Action, Category, Data/Type,Component
如果填写了Componet就是上例中的Test.class)这就形成了显示匹配。所以此部分只讲前几种匹配。匹配规则为最大匹配规则,

1,如果你填写了Action,如果有一个程序的Manifest.xml中的某一个Activity的IntentFilter段中定义了包含了相同的Action那么这个Intent就与这个目标Action匹配,如果这个Filter段中没有定义Type,Category,那么这个Activity就匹配了。但是如果手机中有两个以上的程序匹配,那么就会弹出一个对话可框来提示说明。
Action的值在Android中有很多预定义,如果你想直接转到你自己定义的Intent接收者,你可以在接收者的IntentFilter中加入一个自定义的Action值(同时要设定Category值为"android.intent.category.DEFAULT"),在你的Intent中设定该值为Intent的Action,就直接能跳转到你自己的Intent接收者中。因为这个Action在系统中是唯一的。
2,data/type,你可以用Uri来做为data,比如Uri uri = Uri.parse(http://www.google.com );
Intent i = new Intent(Intent.ACTION_VIEW,uri);手机的Intent分发过程中,会根据http://www.google.com 的scheme判断出数据类型type
手机的Brower则能匹配它,在Brower的Manifest.xml中的IntenFilter中首先有ACTION_VIEW Action,也能处理http:的type,

3,至于分类Category,一般不要去在Intent中设置它,如果你写Intent的接收者,就在Manifest.xml的Activity的IntentFilter中包含android.category.DEFAULT,这样所有不设置Category(Intent.addCategory(String c);)的Intent都会与这个Category匹配。

4,extras(附加信息),是其它所有附加信息的集合。使用extras可以为组件提供扩展信息,比如,如果要执行“发送电子邮件”这个动作,可以将电子邮件的标题、正文等保存在extras里,传给电子邮件发送组件。

Android面试题总结加强版(二)相关推荐

  1. Android之面试题总结加强版(一)

    转载:http://blog.csdn.net/itachi85/article/details/7426451 自己总结的最强android应用面试题集 1.activity的生命周期. 方法 描述 ...

  2. android面试题总结加强版

    http://blog.csdn.net/itachi85/article/details/7426451

  3. Android 面试题笔记(一)

    每日更新每日学习面试笔记,来自https://github.com/Moosphan/Android-Daily-Interview/ 1.自定义 Handler 时如何有效地避免内存泄漏问题? 问题 ...

  4. Android面试题(二)Android高级/资深面试题

    Android面试题(一)Java基础 Android面试题(二)Android基础 Android面试题(三)Java虚拟机 Android面试题(四)设计模式 Android面试题(五)数据结构/ ...

  5. android面试题总结加强

    在加强版的基础上又再加强的android应用面试题集 有些补充略显臃肿,只为学习 1.activity的生命周期. 方法 描述 可被杀死 下一个 onCreate() 在activity第一次被创建的 ...

  6. android面试题大全 android面试题总结

    android面试题大全  android面试题总结 1.Android系统的架构 Android系统架构之应用程序  Android会同一系列核心应用程序包一起发布,该应用程序包包括email客户端 ...

  7. Android 基本面试题

    Android 基本面试题 一.java 核心思想 1.八种基本数据类型和封装类 基本类型 大小(字节) byte 1 short 2 int 4 long 8 float 4 double 8 bo ...

  8. 【Android面试】Android面试题集锦 (陆续更新)(最新2012-6-18)

    1.android开发新浪面试题[开发者必看哦] 下载地址 http://www.eoeandroid.com/thread-177885-1-1.html 2.华为关于android笔试题案例解析 ...

  9. 【Android面试】Android面试题集锦 (陆续更新)

    [Android面试]Android面试题集锦 (陆续更新) 分类: [杂七杂八]2011-05-11 17:58 2064人阅读 评论(0) 收藏 举报 一些常见的Android面试基础题做下总结, ...

最新文章

  1. JavaScript初学者编程题(11)
  2. 鹅厂2020暑期实习第二次一面
  3. ngnix mysql 缓存清除_利用Proxy Cache使Nginx对静态资源进行缓存
  4. 巨头扎堆“当农民”-丰收节交易会·万祥军:谋定生机
  5. 每天一道LeetCode-----最长无重复子串
  6. python 实数如何取整_从面试官角度提问:15道硬核Python面试题,论面霸是如何炼成的...
  7. Linux内核路由表介绍及相关函数
  8. JAVA入门级教学之(局部内部类)
  9. STM32F103单片机J-TAG引脚功能关闭方法
  10. 计算机算法设计与分析 数字三角形
  11. vue前端开发框架、常用vue组件库及简单示例
  12. 激光导航技术是如何实现的?
  13. idm由于法律原因无法下载怎么办?
  14. 2021-07-01 <1000+常用Python库>
  15. 砸盘、销号、解散社群,Merlin Lab“跑路三连”暴露了DeFi哪些问题?
  16. 深度学习之文本摘要自动生成
  17. 有限差分法(Finite Difference Method)解方程:边界和内部结点的控制方程
  18. 游戏设计的艺术:一本透镜的书——第十五章 其中一种体验是故事
  19. WebSocket之仿QQWeb即时聊天系统(下)
  20. Keil MDK5.37以上版本自行添加AC5(ARMCC)编译器的方法

热门文章

  1. 天呐!你知道MSBuild都干了些什么
  2. windows 服务实现定时任务调度
  3. [Abp 源码分析]后台作业与后台工作者
  4. ASP.NET Core ActionFilter引发的一个EF异常
  5. 你知道这个C#开发跨平台APP的样例介绍开源项目吗?
  6. 为什么我们总是「习惯性辩解」?
  7. UnitTest in .NET(Part 5)
  8. 「PowerBI」分析服务多维数据结构重回关系数据库的一大绝招
  9. .NET Core 3.0之深入源码理解Configuration(一)
  10. ASP.NET Core 3.0 项目开始“瘦身”