Android 基础面试题(一)

1.ArrayList和Vector的主要区别是什么?

  • ArrayList在 Java1.2引入,用于替换 Vector
    • Vector:线程同步,当Vector中的元素超过它的初始大小时,Vector会将它的容量翻倍
    • ArrayList:线程不同步,但性能很好。当ArrayList中的元素超过它的初始大小时,ArrayList只增加50%的大小

2.switch是否能作用在byte上,是否能作用在long上,是否能作用在String上?

switch支持使用byte类型,不支持long类型,String支持在java1.7引入生命周期

3. Activity 与 FragMent

生命周期详情点击这

Activity——onCreate->onStart->onResume->onPause->onStop->onDestroy

这里写图片描述

Fragment——onAttach->onCreate->onCreateView->onActivityCreated->onStart->onResume->onPause->onStop->onDestroyView->onDestroy->onDetach

这里写图片描述

4. RemoteView在哪些功能中使用

APPwidget和Notification中

5. SurfaceView和View的区别是什么?

SurfaceView中采用了双缓存技术,在单独的线程中更新界面
View在UI线程中更新界面

6. android中进程的优先级

1.前台进程
2.可见进程
3.服务进程
4.后台进程
5.空进程

7.service生命周期,可以执行耗时操作吗?

绑定模式:

onCreate -- onStartCommand -- onDestory

非绑定模式:

onCreate -- onBind -- onUnBind -- onDestory

Service 默认 在主线程中,不能执行耗时操作(20 S)

特殊情况,可以配置Service所在的进程,让Service在另外的进程中运行:

<service
    android:name="com.baidu.location.f"
    android:enabled="true"
    android:process=":remote" >
</service>

8. Activity 怎么和 Service 绑定,怎么启动?

Activity 通过

bindService(Intent service, ServiceConnection conn, int flags)

跟 Service 进行绑定,当绑定成功的时候 Service 会将代理对象通过回调的形式传给 conn,这样我们就拿到了Service 提供的服务代理对象。

在 Activity 中可以通过 startServicebindService 方法启动 Service。一般情况下如果想获取Service 的服务对象那么肯定需要通过 bindService()方法,比如音乐播放器,第三方支付等。如果仅仅只是为了开启一个后台任务那么可以使用 startService()方法

9. IntentService

  • 会创建独立的 worker 线程来处理所有的 Intent 请求;

  • 会创建独立的 worker 线程来处理 onHandleIntent()方法实现的代码,无需处理多线程问题;

  • 所有请求处理完成后,IntentService 会自动停止,无需调用 stopSelf()方法停止 Service;

  • 为 Service 的 onBind()提供默认实现,返回 null;

  • 为 Service 的 onStartCommand 提供默认实现,将请求 Intent 添加到队列中

eg:

public class MyIntentService extends IntentService {
    private String ex = "";
    private Handler mHandler = new Handler() {
        public void handleMessage(android.os.Message msg) {
            Toast.makeText(MyIntentService.this, "-e " + ex,
                    Toast.LENGTH_LONG).show();
        }
    };
    public MyIntentService(){
        super("MyIntentService");
    }
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        ex = intent.getStringExtra("start");
        return super.onStartCommand(intent, flags, startId);
    }
    @Override
    protected void onHandleIntent(Intent intent) {
/**
 * 模拟执行耗时任务
 * 该方法是在子线程中执行的,因此需要用到 handler 跟主线程进行通信
 */
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        mHandler.sendEmptyMessage(0);
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

10. Service 里面可以弹吐司么

可以的。弹吐司有个条件就是得有一个 Context 上下文,而 Service 本身就是 Context 的子类,因此在 Service 里面弹吐司是完全可以的。比如我们在 Service 中完成下载任务后可以弹一个吐司通知
用户

11. Activity、Intent、Service 是什么关系

他们都是 Android 开发中使用频率最高的类。其中 Activity 和 Service 都是 Android 四大组件之一。

他俩都是 Context 类的子类 ContextWrapper 的子类,因此他俩可以算是兄弟关系吧。不过兄弟俩各有各自的本领,Activity 负责用户界面的显示和交互,Service 负责后台任务的处理。

Activity和 Service 之间可以通过 Intent 传递数据,因此可以把 Intent 看作是通信使者

12. Service 启动方式详解

通过 startService

Service 会经历 onCreate 到 onStart,然后处于运行状态,stopService 的时候调用 onDestroy方法

如果是调用者自己直接退出而没有调用 stopService 的话,Service 会一直在后台运行

通过bindService

Service 会运行 onCreate -- onBind, 这个时候调用者和 Service 绑定在一起。调用者退出了,Srevice 就会调用 onUnbind->onDestroyed 方法

所谓绑定在一起就共存亡了。调用者也可以通过调用 unbindService 方法来停止服务,这时候Srevice 就会调用 onUnbind->onDestroyed 方法

13. Service 复杂的启动方式

两种启动方式混在一起

一个原则是 Service 的 onCreate 的方法只会被调用一次,就是你无论多少次的 startService 又bindService,Service 只被创建一次

如果先是 bind 了,那么 start 的时候就直接运行 Service 的 onStart 方法,如果先是 start,那么 bind的时候就直接运行 onBind 方法

如果 service 运行期间调用了 bindService,这时候再调用 stopService 的话,service 是不会调用onDestroy 方法的,service 就 stop 不掉了,只能调用 UnbindService, service 就会被销毁

如果一个 service 通过 startService 被 start 之后,多次调用 startService 的话,service 会多次调用 onStart 方法。多次调用 stopService 的话,service 只会调用一次 onDestroyed 方法

如果一个 service 通过 bindService 被 start 之后,多次调用 bindService 的话,service 只会调用一次 onBind 方法

多次调用 unbindService 的话会抛出异常

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值