面试

Android面试题集(四)

2022-03-13  本文已影响0人  搬码人

进程与线程的区别

1、定义不一样,进程是执行中的一段程序,而一个进程中执行的每个任务即为一个线程;
2、一个线程只可以属于一个进程,但一个进程中能包含多个线程;
3、线程无地址空间,它包含在进程的地址空间里;
4、线程的开销或代价比进程小。

操作系统对进程调度的算法有哪些

进程间的通信方式有哪些

1、共享存储器系统
2、管道(pipe)通信系统
3、信息传递系统(Message passing system)
4、客户机-服务器系统(Client-Server system)

Android中进程通信的方式

Binder

Binder是Android一个类,实现了IBinder接口。从IPC(进程间通信)来看,Binder是Android中的一种跨进程通信方式。从Android应用程序来看,Binder是客户端和服务器端进行通信的媒介,当bindService的时候,服务器端会返回一个包含了服务器端业务调用的Binder对象。
Binder相比于传统IPC来说更适合于Android系统,具体原因包含以下三点:

Android的Handler机制

什么叫死锁?怎么解决?

死锁是指两个或多个事务在同一资源上相互占用,并请求锁定对方的资源,从而导致恶性循环的现象。
当多个进程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进,这种情况就是死锁。
很显然,如果没有外力的作用,那么死锁涉及到的各个进程都将永远处于封锁状态。

kotlin相对于Java有什么优缺点?

设计模式六大原则及概述

设计模式和六大原则详解:https://www.jianshu.com/p/83eb17adacbb

server和Activity的区别和应用场景

Android七大布局

Android程序启动流程

可以参考我的这篇简书Android启动流程
虽然写得有点草率。哈哈哈。

启动流程
补充 细节补充

Android Service生命周期

service的生命周期,从它被创建,到它被销毁为止,可以有两种不同的路径。

Implement the lifecycle callbacks

和activity一样,service也有一系列的生命周期回调函数,你可以实现它们来监测service状态的变化,并且在适当的时候执行适当的工作。
下面的service展示了每一个生命周期的方法:

public class ExampleService extends Service
{
    int mStartMode; // indicates how to behave if the service is killed
    IBinder mBinder; // interface for clients that bind
    boolean mAllowRebind; // indicates whether onRebind should be used

    @Override
    public void onCreate()
    {
        // The service is being created
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId)
    {
        // The service is starting, due to a call to startService()
        return mStartMode;
    }

    @Override
    public IBinder onBind(Intent intent)
    {
        // A client is binding to the service with bindService()
        return mBinder;
    }

    @Override
    public boolean onUnbind(Intent intent)
    {
        // All clients have unbound with unbindService()
        return mAllowRebind;
    }

    @Override
    public void onRebind(Intent intent)
    {
        // A client is binding to the service with bindService(),
        // after onUnbind() has already been called
    }

    @Override
    public void onDestroy()
    {
        // The service is no longer used and is being destroyed
    }
}
service生命周期

这个图说明了service典型的回调方法,尽管这个图中将开启的service和绑定的service分开,但是你需要记住,任何service都潜在地允许绑定。
所以,一个被开启的service仍然可能被绑定。
实现这些方法,你可以看到两层嵌套的service的生命周期。
The entire lifetime:
service整体的生命时间是从onCreate()被调用开始,到onDestroy()方法返回为止。
和activity一样,service在onCreate()进行它的初始化工作,在onDestroy释放残留的资源。
比如,一个音乐播放器service可以在onCreate()中创建音乐的线程,在onDestroy()中停止这个线程。
onCreate()和onDestroy()会被所有的service调用,不论service是通过startService()还是bindService()创建。
The active lifetime:
service积极活动的生命时间是从onStartCommand()或onBind()被调用开始的,它们各自处理由startService()和bindService()传递过来的Intent对象。
如果service是被开启的,那么它的活动生命周期和整个生命周期一同结束。
如果service是被绑定的,那么它的生命活动周期是在onUnbind()方法返回后结束。
注意:尽管一个被开启的service是通过调用 stopSelf()或stopService()来停止的,没有一个对应的回调函数与之对应,即没有onStop()回调方法。所以,当调用了停止的方法,除非这个service和客户组件绑定,否则系统将会直接销毁它,onDestory()方法会被调用,并且是这个时候唯一会被调用的回调方法。

上一篇下一篇

猜你喜欢

热点阅读