android的面试题(一)

本文详细解析了Android中Activity的生命周期,包括不同状态下的关键方法调用,并介绍了Intent启动Activity的方式。此外,还总结了Android应用中获取图片的多种方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

Android面试题目整理与讲解(一)

这一篇文章专门整理一下研究过的Android面试题,内容会随着学习不断的增加,如果答案有错误,希望大家可以指正

1.简述Activity的生命周期


当Activity开始启动的时候,首先调用onCreate(),onStart(),onResume()方法,此时Activity对用户来说,是可见的状态

当Activity从可见状态变为被Dialog遮挡的状态的时候,会调用onPause()方法,此时的Activity对用户可见,但是不能相
应用户的点击事件

当Activity从可见状态变为被其他的Activity完全覆盖或者是点击Home进入后台的时候,会依次调用onPause(),onStop()方法,如果在这个期间,系统内存不足,导致Activity被回收的话,还会调用onDestory()方法

当Activity从被Dialog遮挡的状态恢复的时候,会调用onResume()方法,从而恢复可以点击的状态

当Activity从被其他Activity遮挡或者是进入后台状态恢复,而且没有被系统回收的时候,会依次调用onRestart(),onStart(),onResume(),恢复到可以与用户进行交互的状态

当Activity从被其他Activity遮挡或者进入后台,而且被系统回收的时候,相当于重新打开一个Activity,既调用onCreate(),onStart(),onResume()方法,从而可以与用户进行交互

在onPause()方法执行后,系统会停止动画等消耗 CPU 的操作,同时我们应该在这里保存数据,因为这个时候程序的优先级降低,有可能被系统收回。在这里保存的数据,应该在 onResume 里读出来,帮用户恢复之前的状态。

在onDestroy()执行后,activity就被真的 干掉,可以用 isFinishing()来判断它,如果此时有 Progress Dialog显示,我们应该在onDestroy()里 cancel 掉,否则线程结束的时候,调用Dialog 的 cancel 方法会抛异常。 

2.Intent启动Activity有几种方式,如何实现?

Intent启动Activity有两种方式,分别为显式意图,隐式意图
第一种,显示意图的实现。
[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. Intent intent = new Intent(this,OtherActivity.class);  
  2. startActivity(intent);  
显式意图还有另外一种形式
[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. Intent intent = new Intent();  
  2. ComponentName component = new ComponentName(this, OtherActivity.class);  
  3. intent.setComponent(component);  
  4. startActivity(intent);  
其实这两种形式其实是一样的,我们看一下Intent构造函数的代码
[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. public Intent(Context packageContext, Class<?> cls) {  
  2.         mComponent = new ComponentName(packageContext, cls);  
  3. }  
这样我们就一目了然了,其实我们经常使用的Intent的构造方法是第二种方式的简化版
第二种,是隐式意图的实现。
首先我们看一下隐式意图的调用方式
[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. Intent intent = new Intent();  
  2. intent.setAction("other");  
  3. startActivity(intent);  
隐式意图是通过setAction来进行区分到底跳转到哪一个界面,那么我们肯定要在需要跳转的页面设置一标志,我们需要在AndroidManifest.xml中对这个进行设置

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <activity android:name="com.example.lifecicledemo.OtherActivity" >  
  2.      <intent-filter>  
  3.          <action android:name="other" />  
  4.   
  5.          <category android:name="android.intent.category.DEFAULT" />  
  6.      </intent-filter>  
  7. </activity>  

这样当我们使用setAction的时候,就可以知道我们到底是想跳转到哪一个页面了。

3.Android中获取图片有哪几种方式

方式一
[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. Drawable drawable = getResources().getDrawable(R.drawable.ic_launcher);  
  2.         img.setImageDrawable(drawable);  

方式二
[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. Bitmap bitmap = BitmapFactory.decodeResource(getResources(),  
  2.                 R.drawable.ic_launcher);  
  3. img.setImageBitmap(bitmap);  

方式三
[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. AssetManager assetManager = getResources().getAssets();  
  2. try {  
  3.     InputStream is = assetManager.open("ic_launcher.png");  
  4.     Bitmap bitmap = BitmapFactory.decodeStream(is);  
  5.     img.setImageBitmap(bitmap);  
  6. catch (IOException e) {  
  7.     e.printStackTrace();  
  8. }  

方式四
[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. AssetManager assetManager = getResources().getAssets();  
  2. try {  
  3.     InputStream is = assetManager.open("ic_launcher.png");  
  4.     Drawable drawable = Drawable.createFromStream(is, null);  
  5.     img.setImageDrawable(drawable);  
  6. catch (IOException e) {  
  7.     e.printStackTrace();  
  8. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值