Android面试题大全之Activity

2025-04-22 11:46:07

常见的Android面试题,掌握这些让你面试轻松过!

工具/原料

Android Studio

Eclipse

Activity的所有面试题

1、什么是Activity?-------------------------------------------------------------------------------------------------------四大组件之一,一般一个用户交互界面对应一个activitysetContentView() ,// 要显示的布局activity 是Context的子类,同时实现了window.callback和keyevent.callback,可以处理与窗体用户交互的事件.button.setOnclickLinstener{}开发常用的的有ListActivity , PreferenceActivity ,TabAcitivty等…如果界面有共同的特点或者功能的时候,还会自己定义一个BaseActivity

2、请描述一下Activity 生命周期?-------------------------------------------------------------------------------------------------------生命周期描述的是一个类从创建(new出来)到死亡(垃圾回收)的过程中会执行的方法..在这个过程中 会针对不同的生命阶段会调用不同的方法Activity从创建到销毁有多种状态,从一种状态到另一种状态时会激发相应的回调方法,这些回调方法包括:oncreate ondestroy onstop onstart onresume onpause其实这些方法都是两两对应的,(如下图)onCreate创建与onDestroy销毁;onStart可见与onStop不可见;onResume可编辑(即焦点)与onPause;对话框的弹出,Activity.this对话框是activity的一部分.这6个方法是相对应的,那么就只剩下一个onRestart方法了,这个方法在什么时候调用呢?答案就是:在Activity被onStop后,但是没有被onDestroy,在再次启动此Activity时就调用onRestart(而不再调用onCreate)方法;如果被onDestroy了,则是调用onCreate方法。最后讲自己项目中的经验,比如说客户端每次进入某个界面的时候都要看到最新的数据,这个刷新列表的操作 就放在onStart()的方法里面.这样保证每次用户看到的数据都是最新的

Android面试题大全之Activity

3、两个Activity之间跳转时必然会执行的是哪几个方法?-------------------------------------------------------------------------------------------------------一般情况比如说有两个activity,分别叫A,B ,当在A里面激活B组件的时候,A 会调用 onPause()方法,然后B 调用onCreate() ,onStart(), OnResume() ,这个时候B覆盖了窗体, A会调用onStop()方法.如果B呢 是个透明的,或者是对话框的样式, 就不会调用onStop()方法

4、横竖屏切换时候Activity的生命周期?-------------------------------------------------------------------------------------------------------这个生命周期跟清单文件里的配置有关系1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期默认首先销毁当前activity,然后重新加载Onpause onstop ondestory oncreate onstart onresume2、设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法游戏开发中, 屏幕的朝向都是写死的.

5、你后台的Activity被系统 回收怎么办?如果后台的Activity由于某原因被系统回收可了,如何在被系统回收之前保存当前状态?-------------------------------------------------------------------------------------------------------除了在栈顶的activity,其他的activity都有可能在内存不足的时候被系统回收,一个activity越处于栈底,被回收的可能性越大.protected void onSaveInstanceState(Bundle outState){super.onSaveInstanceState(outState);outState.putLong("id", 1234567890);}public void onCreate(Bundle savedInstanceState) {//判断 savedInstanceState是不是空.//如果不为空就取出来super.onCreate(savedInstanceState);}

6、如何退出Activity?如何安全退出但诌诎箬已调用多个Activity的Application?------幻腾寂埒-------------------------------------------------------------------------------------------------退出activity 直接调用 finish () 方法 .用户点击back键 就是退出一个activity退出activity 会执行 onDestroy()方法 .1、抛异常强制退出:该方法通过抛异常,使程序Force Close。验证可以,但是,需要解决的问题是,如何使程序结束掉,而不弹出Force Close的窗口。//安全结束进程android.os.Process.killProcess(android.os.Process.myPid());2、记录打开的Activity:每打开一个Activity,就记录下来。在需要退出时,关闭每一个Activity即可。List<Activity> lists ;在application 全集的环境里面lists = new ArrayList<Activity>();每一个activity在执行oncreate()方法的时候lists.add(this);在Ondestory()lists.remove(this);lists.add(activity);for(Activity activity: lists){activity.finish();}3、发送特定广播:在需要结束应用时,发送一个特定的广播,每个Activity收到广播后,关闭即可。//给某个activity 注册接受接受广播的意图registerReceiver(receiver, filter)//如果过接受到的是 关闭activity的广播 就调用finish()方法 把当前的activity finish()掉4、递归退出在打开新的Activity时使用startActivityForResult,然后自己加标志,在onActivityResult中处理,递归关闭。404 退出程序OnActivityResult();

7、两个Activity之间怎么传递数据?------------------颍骈城茇---------------------------------------------------------幻腾寂埒----------------------------基本数据类型可以通过 Intent 传递数据extras.putDouble(key, value)intent.putExtra(name, value)// 通过intent putExtra 方法 基本数据类型 都传递Bundle bundle = new Bundle();bundle.putShort(key, value);intent.putExtras(bundle);intent.putExtras(bundle)获取到激活他的 getIntent();Intent intent = getIntent();Bundle bundle = intent.getExtras();Bundle 类似map的集合intent.getStringExtra("key","value");intent.getBooleanExtra("key","value")Application 全局里面存放 对象 ,自己去实现自己的application的这个类,基础系统的application , 每个activity都可以取到让对象实现 implements Serializable 接口把对象存放到文件上.让类实现Serializable 接口,然后可以通过ObjectOutputStream //对象输出流 File file = new File("c:\\1.obj");FileOutputStream fos = new FileOutputStream(file);ObjectOutputStream oos = new ObjectOutputStream(fos);Student stu = new Student();stu.setId("10001");stu.setName("zs");oos.writeObject(stu);FileInputStream fis = new FileInputStream(file);ObjectInputStream ois = new ObjectInputStream(fis);Student stu1 = (Student) ois.readObject();System.out.println(stu1.getName());Parcelable 和 Serializable Parcelable 把对象序列化到android操作系统 的一块公用的内存空间 文件/网络//传递数据的引用 intent.setData(Uri)Uri.fromFile();//大图片的传递contentResolver.getInputStream(uri);

8、同一个程序,但不同的Activity是否可以放在不同的Task任务栈中?-------------------------------------------------------------------------------------------------------比方说在激活一个新的activity时候, 给intent设置flagIntent的flag添加FLAG_ACTIVITY_NEW_TASKsingleinstance 单独的任务栈这个被激活的activity就会在新的task栈里面…Intent intent = new Intent(A.this,B.class);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);startActivity(intent);

Activity和其他相关的

1、怎么让在启动一个Activity是就启动一个service?-------------------------------------------------------------------------------------------------------在activity的onCreate()方法里面 startService();

2、Activity怎么和service绑定,怎么在activity中启动自己对应的service?-------------------------------------------------------------------------------------------------------startService() 一旦被创建 调用者无关 ,没法使用service里面的方法 ;bindService () 把service 与调用者绑定 ,如果调用者被销毁, service会销毁bindService() 我们可以使用service 里面的方法bindService(). 让activity能够访问到 service里面的方法构建一个intent对象,Intent service = new Intent(this,MyService.class);通过bindService的方法去启动一个服务,bindService(intent, new MyConn(), BIND_AUTO_CREATE);ServiceConnection 对象(重写onServiceConnected和OnServiceDisconnected方法) 和BIND_AUTO_CREATE.private class myconn implements ServiceConnection{ public void onServiceConnected(ComponentName name, IBinder service) { //可以通过IBinder的对象 去使用service里面的方法 } public void onServiceDisconnected(ComponentName name) { }}

3、请描述一下Intent 和 Intent Filter。-----------------------------------------幻腾寂埒--------------------------------------------------------------Android 中通过 Intent 对象来表示一条消息,一个 Intent 对象不仅包含有这个消息的目的地,还可以包含消息的内容,这好比一封 Email,其中不仅应该包含收件地址,还可以包含具体的内容。对于一个 Intent 对象,消息“目的地”是必须的,而内容则是可选项。通过Intent 可以实现各种系统组件的调用与激活.Intent filter: 可以理解为邮局或者是一个信笺的分拣系统…这个分拣系统通过3个参数来识别Action:动作Intent.ation_viewData: 数据uri urimimeCategory : 而外的附加信息Action 匹配Action 是一个用户定义的字符串,用于描述一个 Android 应用程序组件,一个 Intent Filter 可以包含多个 Action。在 AndroidManifest.xml 的 Activity 定义时可以在其 <intent-filter >节点指定一个 Action 列表用于标示 Activity 所能接受的“动作”,例如:<intent-filter ><action android:name="android.intent.action.MAIN" /><action android:name="cn.itcast.action" />……</intent-filter>如果我们在启动一个 Activity 时使用这样的 Intent 对象:Intent intent =new Intent();intent.setAction("cn.itcast.action");那么所有的 Action 列表中包含了“cn.itcast”的 Activity 都将会匹配成功。Android 预定义了一系列的 Action 分别表示特定的系统动作。这些 Action 通过常量的方式定义在 android.content. Intent中,以“ACTION_”开头。我们可以在 Android 提供的文档中找到它们的详细说明。URI 数据匹配一个 Intent 可以通过 URI 携带外部数据给目标组件。在 <intent-filter >节点中,通过 <data/>节点匹配外部数据。mimeType 属性指定携带外部数据的数据类型,scheme 指定协议,host、port、path 指定数据的位置、端口、和路径。如下:<dataandroid:mimeType="mimeType"android:scheme="scheme"android:host="host"android:port="port"android:path="path"/>电话的uri tel: 12345 http://www.baidu.com自己定义的uri itcast://cn.itcast/person/10如果在 Intent Filter 中指定了这些属性,那么只有所有的属性都匹配成功时URI 数据匹配才会成功。Category 类别匹配<intent-filter >节点中可以为组件定义一个 Category 类别列表,当 Intent 中包含这个列表的所有项目时 Category 类别匹配才会成功。默认是DEFAULT

4、说说Activity,Intent,Ser箪滹埘麽vice是什么关系 。麦当劳和麦当娜的关系是什么关系?-----------------------幻腾寂埒--------------------------------------------------------------------------------这种问题,就讲下activity,讲一下service,说一下 通过intent去激活组件,传递数据.说自己项目中有这样一个网络更新的功能,显示界面就用的activity,后台有个service每隔半小时都去访问下服务器获取更新的数据…开启服务用的是intent来开启1. 请描述一下Broadcast Receiver。有很多广播接收者 ,系统已经实现了.广播分两种有序广播无序广播指定接收者的广播 . 是不可以被拦截掉的<intent-filter android:priority="1000"><action android:name="android.provider.Telephony.SMS_RECEIVED"/></intent-filter>onReceive()方法.abortBroadcast();有序广播有一个特例sendOrderedBroadcast(intent, receiverPermission, resultReceiver, scheduler, initialCode, initialData, initialExtras);resultReceiver 广播接受者如果我们显示的指定了广播接收者无论如何 都会接受广播 时间 abortBroadcast();的方法不会终止广播时间SetresultData();StickysendStickyBroadcast(intent)// 阴魂不散的广播Wifi设置用于接收系统的广播通知, 系统会有很多sd卡挂载,手机重启,广播通知,低电量,来短信等,一个apk的安装成功….手机卫士中自定义一个broadcast receiver<intent-filter android:><action> sms_received </action></intent-filter>来获取短信到来的广播, 根据黑名单来判断是否拦截该短信.画画板生成图片后,发送一个sd挂载的通知,通知系统的gallery去获取到新的图片.Intent intent = new Intent(Intent.ACTION_MEDIA_MOUNTED,Uri.parse("file://"+Environment.getExternalStorageDirectory()));sendBroadcast(intent);

5、Service和Activity在同一个线程吗?------------------------------------------------------------------------------------------------------- 默认情况同一线程 main主线程 ui线程

6、widget相对位置的完成在activity的哪个生命周期阶段实现。-------------------------------------------------------------------------------------------------------widget可以理解成桌面小控件,也可以理解成 某个button, imageview这样的控件…onmeasure() // 计算控件在屏幕上的位子某个view 要显示在界面ondraw被显示到界面上的

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
相关推荐
  • 阅读量:95
  • 阅读量:88
  • 阅读量:36
  • 阅读量:57
  • 阅读量:71
  • 猜你喜欢