Android基础面试题

  • Fragment 如何实现类似 Activity 栈的压栈和出栈效果的?

Fragment 的事物管理器内部维持了一个双向链表结构,该结构可以记录我们每次 add 的Fragment 和 replace 的 Fragment。

先将上一个fragment压栈,再添加一个新的fragment。

transition.addToBackStack(null)

通过popBackStack可以将压入的栈再次显示出来。

supportFragmentManager.popBackStack()
  • App异常退出时,打印日志,重新启动怎么做?

在Application中注册UncaughtExceptionHandler,当发生崩溃会回调uncaughtException()方法,此时在其中做打印日志,重新启动等操作。

public class MyApplication extends Application {

    private static MyApplication application;
    @Override
    public void onCreate() {
        super.onCreate();
        application = this;
        // 程序崩溃时触发线程  以下用来捕获程序崩溃异常
        Thread.setDefaultUncaughtExceptionHandler(handler); 
    }
   private Thread.UncaughtExceptionHandler handler = new Thread.UncaughtExceptionHandler() {
        @Override
        public void uncaughtException(Thread t, Throwable e) {
            restartApp(); //发生崩溃异常时,重启应用
        }
    };
    private void restartApp() {
        Intent intent = new Intent(this, MainActivity.class);
        PendingIntent restartIntent = PendingIntent.getActivity(
                application.getApplicationContext(), 0, intent,Intent.FLAG_ACTIVITY_NEW_TASK);
        //退出程序
        AlarmManager mgr = (AlarmManager)application.getSystemService(Context.ALARM_SERVICE);
        mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 1000,
                restartIntent); // 1秒钟后重启应用

        //结束进程之前可以把你程序的注销或者退出代码放在这段代码之前
        android.os.Process.killProcess(android.os.Process.myPid());
    }

}
  • res/drawable、res/raw、/assets下的区别

res文件夹和assets文件夹区别:
1.res下创建文件,能将ID注册在R文件中,即能通过R.res.xx获取属性。assets需要用径路来使用文件。
2.res下,打包时自动只打包用的上的文件,没用上的文件不打包;assets文件夹里,无论是否在项目中用到,会被原封不动的打包到APK。
3.res/raw,res/assets下图片不会被压缩,res/drawable下会被压缩。

动画实现原理:

Android视图是以树形结构添加的,子view都有一个父view。当一个view调用动画,会对其比如大小,位置,透明度等发生改变。子view就会在每一帧动画改变后调用invalidate(),invalidate内部获取了parentView-它的父view调用ondraw()进行重绘,父view就会遍历将所有子view进行重绘,从而将子view的变化过程实时绘制出来。

低版本SDK实现高版本api

当程序使用一些方法或属性时,当判断项目minsdk还不支持该属性时,就会报错。那么就要加上
@TargetApi(Build.VERSION_CODES.X),声明让低版本sdk去调用高版本的api。

Android为每个应用程序分配的内存大小是多少?

Android设备出厂以后,java虚拟机对单个应用的最大内存分配就确定下来了,一旦应用超出这个内存使用值就会OOM。
不同的手机支持的App最大内存不一样。可以通过ActivityManager去获取。

ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
        int memClass = activityManager.getMemoryClass();

获取最大内存:

Runtime rt=Runtime.getRuntime();
long maxMemory=rt.maxMemory();

Android应用程序的默认最大内存值为16M

    static public int staticGetLargeMemoryClass() {
        // Really brain dead right now -- just take this from the configured
        // vm heap size, and assume it is in megabytes and thus ends with "m".
        String vmHeapSize = SystemProperties.get("dalvik.vm.heapsize", "16m");
        return Integer.parseInt(vmHeapSize.substring(0, vmHeapSize.length() - 1));
    }

Bundle机制

Bundle用于在Activity,fragment之间传值,Activity,fragment保存状态值的使用。

public final class Bundle extends BaseBundle implements Cloneable, Parcelable

Bundle用final修饰,不能被继承。由于要传值,所以需要序列化。
内部使用ArrayMap的键值对进行存储。

ArrayMap<String, Object> mMap = null; 
怎么跨进程启动app?

使用PackageManager,通过包名来启动应用,intent需要添加flag FLAG_ACTIVITY_NEW_TASK。

这里启动一个应用,包名为com.libo.wanandroid,启动activity的类路径为com.libo.module_home.activity.HomeActivity:

    /**
     * 跨进程启动应用
     */
    private void remoteLaunch() {
        ComponentName componentName = new ComponentName("com.libo.wanandroid", "com.libo.module_home.activity.HomeActivity");

        Intent launchIntent = new Intent();
        launchIntent.setComponent(componentName);
        launchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(launchIntent);
    }

参考:https://blog.csdn.net/binzeefox/article/details/106755762

如何将一个Activity设置成窗口的样式。

<activity>中配置:android :theme="@android:style/Theme.Dialog"

Android中还了解哪些方便线程切换的类?

例如:Runnable AsyncTask EventBus Rxjava 协程

make Project、clean Project、Rebuild Project的区别

Make Project:编译Project下所有Module,一般是自上次编译后Project下有更新的文件,不生成apk。
Clean Project:删除之前编译后的编译文件,并重新编译整个Project,比较花费时间,不生成apk。
Rebuild Project:同Clean Project一样
Build APK:重新编译生成apk

子view比父view大时,怎么让子view能超出父view?

在父布局中,加上android:clipChildren="false"这个属性,不限制子view大小,默认为true。

  • 如何绕过9.0Http限制?

Android P以上的应用默认都被限制了明文流量的网络请求,非加密的流量请求都会被系统禁止掉。需要在AndroidManifest.xml文件中的application标签中设置:

android:usesCleartextTraffic="true"

android:usesCleartextTraffic 指示应用程序是否打算使用明文网络流量,例如明文HTTP。

  • Kotlin中函数的可见性修饰符是怎样的
  • 直接在 Activity 中创建一个 thread 跟在 service 中创建一个 thread 之间的区别?

在 Activity 中被创建:该 Thread 的就是为这个 Activity 服务的,完成这个特定的
Activity 交代的任务,主动通知该 Activity 一些消息和事件,Activity 销毁后,该
Thread 也没有存活的意义了。
在 Service 中被创建:这是保证最长生命周期的 Thread 的唯一方式,只要整个
Service 不退出,Thread 就可以一直在后台执行,一般在 Service 的 onCreate()
中创建,在 onDestroy()中销毁。所以,在 Service 中创建的 Thread,适合长期
执行一些独立于 APP 的后台任务,比较常见的就是:在 Service 中保持与服务器
端的长连接。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 210,978评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,954评论 2 384
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,623评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,324评论 1 282
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,390评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,741评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,892评论 3 405
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,655评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,104评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,451评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,569评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,254评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,834评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,725评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,950评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,260评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,446评论 2 348

推荐阅读更多精彩内容

  • 0.Android手机操作系统的四层架构? Applications , Application Framewor...
    lucas777阅读 7,831评论 0 16
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,090评论 1 32
  • 前几天整理了Java面试题集合,今天再来整理下Android相关的面试题集合.如果你希望能得到最新的消息,可以关注...
    Boyko阅读 3,625评论 8 135
  • 介绍自己负责的部分,如何实现的。 自定义view viewGroup activity的启动流程 事件传递及滑动冲...
    东经315度阅读 1,199评论 1 4
  • 别人的总结不一定适合自己,所以尽量多做一些自己的总结,针对自己的薄弱点重点说明,适当的借鉴别人,少走一些弯路。最重...
    renkuo阅读 7,382评论 2 48