Android 面试题.docx

上传人:b****8 文档编号:9291625 上传时间:2023-02-04 格式:DOCX 页数:8 大小:19.68KB
下载 相关 举报
Android 面试题.docx_第1页
第1页 / 共8页
Android 面试题.docx_第2页
第2页 / 共8页
Android 面试题.docx_第3页
第3页 / 共8页
Android 面试题.docx_第4页
第4页 / 共8页
Android 面试题.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

Android 面试题.docx

《Android 面试题.docx》由会员分享,可在线阅读,更多相关《Android 面试题.docx(8页珍藏版)》请在冰豆网上搜索。

Android 面试题.docx

Android面试题

Android面试题

Java基础

1、写出遍历hashmap的两种方式

一种利用entrySet 

Map map=newHashMap(); 

for(Entry entry:

map.entrySet()){ 

entry.getKey(); 

entry.getValue(); 

}

一种利用keySet的方式 

Map map=newHashMap(); 

for(Stringkey:

map.keySet()){ 

map.get(key); 

}

2、abstractclass和interface有什么区别

abstract可以修饰抽象方法,而一个类只要有一个抽象方法,就必须用abstract定义该类,即抽象类。

 

用interface修饰的类,里面的方法都是抽象方法,因此在定义接口的时候,可以直接不加那些修饰,系统会默认的添上去。

接口里面的字段都是公有常量,即publicstaticfinal修饰的字段。

3、“==”和equals方法究竟有什么区别?

对于==,如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;

如果作用于引用类型的变量,则比较的是所指向的对象的地址

对于equals方法,注意:

equals方法不能作用于基本数据类型的变量

如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;

诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。

 

android基础

1、如何将一个Activity设置成窗口的样式,当在一个activity中启动这个窗口activity的时候执行那些生命周期方法?

清单文件中Activitytheme设置为Theme.Dialog

activity只会支持onPause()方法而不会执行onStop方法

2、android线程间通信方式有哪几种?

1.runOnUiThread(Runnable)       在子线程中直接使用该方法,可以更新UI   

2.View.postDelay(Runnable , long)/new Handler().postDelayed(Runnable) 在需要更新UI的地方调用该方法,Runnable对象的方法里,直接操作UI

 3.使用Handler   

4.使用AsyncTask

3、已知一个应用程序开启多个activity,如何安全退出这个应用程序?

在Application中持有一个全局的集合(List),进而在其onCreate()方法中,实例化该集合对象 

在Activity的onCreate方法中,通过getApplication()获取到当前应用的Application对象,通过对象,就可以在获取到里面的全局的集合,就可以将当前的Activity加入到集合中去,每一个Activity的onCreate方法中,都执行相同的操作 

通过上述的操作,我们就可以收集到所有已经被打开的Activity 

在每一个Activity的onBackPressed()方法中,获取该全局的集合(List),遍历集合,获取每一个Activity,并且调用其finish()方法即可 

4、应用程序在启动的需要用户登录,如何记住用户的登录信息,如果有保存用户名密码的功能,该如何操作,有哪些方式实现?

Sharedpreferences和外部的数据库

5、广播使用方式有哪些?

这些方式有什么异同?

请谈谈Android引入广播机制的用意。

在androidmainfest.xml中注册      

   

 

name = "android.intent.action.PICK"/>        

      

    缺点:

常驻型,占资源比较大   

   registerReceiver(receiver,filter);

用意是方便各大组件中进行即时的相互通讯

6、什么是ANR,如何产生的,如何避免它?

在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:

Application Not Responding)对话框。

   运行在主线程里的任何方法都尽可能少做事情,多用工作线程,耗时操作一定要在工作线程

7、什么情况下回产生ForceClose?

写出你遇到的几个导致其产生的异常?

导致出现Force Close的原因有很多,常见的有比如空指针啦,类没有找到啦,资源没找到,就连Android API使用的顺序错误也可能导致(比如setContentView()之前进行了findViewById()操作) 

8、谈一下横竖屏切换时候activity的生命周期?

1、不设置Activity的android:

configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次 

2、设置Activity的android:

configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次 

 3、设置Activity的android:

configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法 

9、当ListView带有网络图片怎么避免oom异常?

读取位图Bitmap时,分给虚拟机中的图片的堆栈大小只有8M,如果超出了,就会出现OutOfMemory异常 

1.要及时回收Bitmap的内存  Bitmap类有一个方法recycle() System.gc();  

2. 捕获异常 

  3. 缓存通用的Bitmap对象   

4. 压缩图片

10.介绍一下service,service作为一个后台程序,能否执行耗时操作?

不能,理论上四大组件都是运行在主线程上面的,主线程是不允许执行耗时操作的

11、谈谈android屏幕多分辨下的开发

在res目录下创建不同的layout文件夹 

  drawable-mdpi、drawable-xhdpi、drawable-xxhdpi  这三个主要是为了支持多分辨率   

(1)drawable-mdpi里面存放低分辨率的图片,如WVGA (480x800),FWVGA (480x854)   

(2)drawable-xhdpi里面存放中等分辨率的图片,如 (1280x720)   

(3)drawable-xxhdpi里面存放高清分辨率的图片,如(1920x1080)

12.android:

layout_gravity,android:

gravity,android:

padding,android:

layout_margin之间的区别

 gravity 属性是对该view 内容的限定 

  layout_gravity 是用来设置该view相对与起父view 的位置  

  padding 填充的意思,指的是view中的content与view边缘的距离   margin表示的是view的左边缘与parent view的左边缘的距离 

  margin一般用来描述控件间位置关系,而padding一般描述控件内容和控件的位置关系。

13.Intent的使用,能传递那些数据类型?

怎么传对象?

Bitmap怎么传递

简单或基本数据类型   传递一个Bundle 

  传递Serializable对象   Parcelable对象   Intent   

  Android中Intent传递类对象提供了两种方式   一种是 通过实现Serializable接口传递对象,一种是通过实现Parcelable接口传递对象。

   要求被传递的对象必须实现上述2种接口中的一种才能通过Intent直接传递。

  

  使用intent传递bitmap对象   存:

 i.putExtra("0", bitmap);  

  取:

 i = getIntent(); bitmap= i.getParcelableExtra("0");

 

android高级

1、如果后台的Activity由于某些原因被系统回收了,如何在系统回收的之前保存当前状态?

Activity中提供了一个方法:

onSavedInstanceState(Bundle obj).当系统销毁一个Activity时,会将Activity的状态信息已键值对形式存放在bundle对象中.  

 onCreate方法的定义是"protected void onCreate (Bundle savedInstanceState)   Activity还有个onRestoreInstanceState(Bundle outState)方法.这个方法的描述中也写到在Activity回复先前保存的状态时会被调用

2、请解释下Message、Handler、MessageQueue、Looper之间的关系。

Handler获取当前线程中的looper对象,looper用来从存放Message的MessageQueue中取出Message,再有Handler进行Message的分发和处理.   Message Queue(消息队列):

用来存放通过Handler发布的消息,通常附属于某一个创建它的线程,可以通过Looper.myQueue()得到当前线程的消息队列 

  Handler:

可以发布或者处理一个消息或者操作一个Runnable,通过Handler发布消息,消息将只会发送到与它关联的消息队列,然也只能处理该消息队列中的消息 

  Looper:

是Handler和消息队列之间通讯桥梁,程序组件首先通过Handler把消息传递给Looper,Looper把消息放入队列。

Looper也把消息队列里的消息广播给所有的   Handler:

Handler接受到消息后调用handleMessage进行处理 

  Message:

消息的类型,在Handler的handleMessage方法中得到单个的消息进行处理

3、请说明 synchronized 关键字的用法 

 方法前加上synchronized,这个方法即是同步的, 

而使用synchronized(obj)和一对大括号包围住的代码块,则是同步块。

4、谈一下自定义控件的步骤和注意点,及怎么使用。

1. 写一个自定义控件类,这个类就是你的自定义控件的实现. 

 2. 在res/values目录下建立一个attrs.xml的文件,在这个文件中增加对控件的自定义属性的定义. 

 3. 使用带AttributeSet参数的类的构造函数,并在构造函数中将自定义控件类中变量与attrs.xml中的属性连接起来. 

 4. 在自定义控件类中使用这些已经连接的属性变量.   

5. 将自定义的控件类定义到布局用的xml文件中去. 

  6. 在界面中生成此自定义控件类对象,就完成了自定义控件的创建和使用了.

5、在一个应用程序中,已知按顺序启动6个activity,编号按顺序分别是1,2,3,4,5,6,如何从第6个activity跳转到第2个activity,并清除中间的activity?

设置2的launchMode="singleTask,其它的launchMode都为默认的standard,然后设置2和6的android:

taskAffinity为一样的值,这时,6跳转到2时,会清除掉中间的activity

6、如何保证service不被后台系统杀死,service杀死后如何重启。

Android开发的过程中,每次调用startService(Intent)的时候,都会调用该Service对象的onStartCommand(Intent,int,int)方法,然后在onStartCommand方法中做一些处理。

然后我们注意到这个函数有一个int的返回值  

从Android官方文档中,我们知道onStartCommand有4种返回值:

  

START_STICKY:

 

如果service进程被kill掉,保留service的状态为开始状态,但不保留递送的intent对象。

随后系统会尝试重新创建service,由于服务状态为开始状态,所以创建服务后一定会调用onStartCommand(Intent,int,int)方法。

如果在此期间没有任何启动命令被传递到service,那么参数Intent将为null。

  

START_NOT_STICKY:

 “非粘性的”。

使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统不会自动重启该服务。

  

START_REDELIVER_INTENT:

 

重传Intent。

使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统会自动重启该服务,并将Intent的值传入。

  

START_STICKY_COMPATIBILITY:

 

START_STICKY的兼容版本,但不保证服务被kill后一定能重启。

  

现在的安卓手机,只要一长按home键,通常都会列出近期任务,这里可以干掉所有进程所以一直不断的在后台运行是不行的,但是你可以通常广播来激活你的service

7、请用代码来计算字符串“Iamgotoswimming”中每个字母的个数,并打印出来

publicstaticvoidmain(String[]args){

Stringstring="Iamgotoswimming";

Mapmap=newHashMap<>();

for(inti=0;i

charchars=string.charAt(i);

intsum=search(string,chars);

map.put(chars,sum);

}

System.out.println(map);

}

publicstaticintsearch(Stringsr,charar){

intcount=0;

intnum=0;

inttemp=0;

while((sr.length()-temp)>=1){

num=sr.indexOf(ar,temp);

if(num==-1){

temp=sr.length();

}else{

temp=num+1;

count++;

}

}

returncount;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 自然景观

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1