Android四大组件

Android四大组件之Activity详解

1. Activity与Servlet的异同?
    相同点:

1.1 Activity、Servlet的职责都是向用户呈现界面
1.2 Activity、Servlet的实例都是系统创建,方法都由系统进行回调
1.3 Activity、Servlet都有自己的生命周期
1.4 Actiivty、Servlet开发出来之后都需要进行配置    
    区别:

2.1 Activity是窗口的容器,而Servlet生产的是窗口要显示的内容 
2.2 Activity的跳转主要是由Intent来控制的,Servlet的跳转主要是由URL地址来实现的
2. Activity的生命周期?
onCreate():当第一次进入某一个Activity的时候会调用该方法
onStart():当Activity被我们看见的时候就调用该方法
onRestart():当一个Activiy再次被打开的时候就会调用该方法
onResume():在Activity能获得用户焦点的时候就调用该方法
onPause():当Activity失去用户焦点的时候会调用该方法
onStop():当Activity完全被遮挡住的时候就会调用该方法 
onDestory():当Activity被销毁的时候回调用该方法
3. Activity之间的跳转所经历生命周期?
3.1 FirstActivity打开:
         FirstActivity--->onCreate
         FirstActivity--->onStart
         FirstActivity--->onResume

3.2 FirstActivity跳转到SecondActivity
        FirstActivity--->onPause
        SecondActivity--->onCreate
        SecondActivity--->onStart
        SecondActivity--->onResume
        FirstActivity--->onStop

3.3 SecondActivity返回到FirstActivity
        SecondActivity--->onPause
        FirstActivity--->onReStart
        FirstActivity--->onStart
        FirstActivity--->onResume
        SecondActivity--->onStop
        SecondActivity--->onDestroy

4. Activity之间跳转的本质?
     Activity之间的跳转切换实际就是在后台进行的一个压栈和弹栈的过程,手机屏幕上始终显示的是堆栈中最顶部的那个Activity,弹栈就意味着Activity会被销毁

4.1 应用程序启动之后,运行第一个Activity之后,该Activity对象被压入到stack当中
4.2 点击按钮后启动第二个Activity,该Actitivy对象被压入到Stack当中
4.3 点击Back按钮,这时第二个Activity对象堆栈当中弹出
4.4 在再次点击Back按钮之后,显示FirystActivity被从栈当中弹出来
5. Activity的四种启动模式有哪几种?
5.1 standard:多例
        模式启动模式,每次激活Activity时都会创建Activity,并放入任务栈中

5.2 singleTop:栈顶单例
        如果在任务的栈顶正好存在该Activity的实例, 就重用该实例,否者就会创建新的实例并放入栈顶(即使栈中已经存在该Activity实例,只要不在栈顶,都会创建实例)。
        浏览器添加书签的功能
        发送短信重复一百下,避免重复界面

5.3 singleTask:单栈单例【同一个应用共享一个Activity】
       如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的onNewIntent())。重用时,会让该实例回到栈顶,因此在它上面的实例将会被移除栈。如果栈中不存在该实例,将会创建新的实例放入栈中。
     浏览器,节约内存空间

5.4 singleInstance:多栈单例【多个应用共享一个Activity】
        在一个新栈中创建该Activity实例,并让多个应用共享该栈中的该Activity实例。一旦该模式的Activity的实例存在于某个栈中,任何应用再激活Activity时都会重用该栈中的实例,其效果相当于多个应用程序共享一个应用,不管谁激活该Activity都会进入同一个应用中。
        有道词典,不管在哪个应用程序里面打开,只保证有一个相同的activity
        用户来电

6.SingleTask与SingleInstace之间的区别?
SingleTask:共享任务栈,整个任务栈只有一个实例,适用于应用的入口界面
SingleInstance:独享任务栈,整个系统只有一个实例,适用于需要和应用分离开的页面
android:taskAffinity=""
android:launchMode="singleTask"
结果:可以创建一个新的任务栈

android:taskAffinity=""
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);    
结果:可以创建一个新的任务栈
7. 怎么通过Activity获取res文件下的资源
InputStream is = getResources().getAssets().open("car_move.jpg");
InputStream is = getResources().openRawResource(R.raw.simulated);


Android四大组件之一 —— Service

  1. 什么是Service

    • Service是Android四大组件之一 (必须在androidManifest.xml中进行注册)

    • 可以在后台执行长时间运行操作而没有用户界面的应用组件

Activity MainActivity.java

activity_main.xml

Service XXXXXXX.java

Service在现阶段的APP什么位置有体现?

手机音乐播放

2.创建Service

不使用Android Studio应该如何创建?

1. 创建java文件,继续Service
1. 在AndroidManifest.xml中进行注册

使用android Studio应该如何创建?

 怎么调用Service

第一种方式:startService 访问者跟Service是不绑定的

启动Service

Intent intent = new Intent(MainActivity.this, MyService.class);
startService(intent);

关闭Service

Intent intent = new Intent(MainActivity.this, MyService.class);stopService(intent);

第二种方式:bindService 访问者跟Service是绑定,访问者一旦退出了,Service也就终止了。

绑定service

Intent intent = new Intent(MainActivity.this, MyBindService.class);
bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);    
public ServiceConnection serviceConnection = new ServiceConnection() {
	@Override
	public void onServiceConnected(ComponentName name, IBinder service) {
		Log.i("ServiceConnection", "onServiceConnected");
	}

	@Override
	public void onServiceDisconnected(ComponentName name) {
		Log.i("ServiceConnection", "onServiceDisconnected");
	}
};
  1. Service的声明周期

    startService的方式 onCreate() onStartCommand() onDestroy()

    bindService的方式 onCreate() onBind() onUnBind() onDestroy()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值