Android关于技能清单的进一步学习

之前在博客上看到一篇关于技能清单的列表,觉得言之有理,果断转过来。现在陆陆续续复习或者学习一遍,记录下来,方便随时温习。

  • Activity相关

    提到Activity,首先想到的居然是Intent,好吧,不知道为啥。intent是啥勒,是个通讯工具,于组件之间传递各种消息,启动activity,broadcast,service啊什么的。

  • 启动activity分两种

    一种是startactivity() 直接启动另一个activity。

    另一种是 startactivityForResult() 要获取返回值的启动。通过重写onActivityResult()来获取返回值。在启动的时候定义一个int类型的返回值,这个值由开发者自行定义。在新打开的activity关闭后,会返回结果。

在第一个Activity中
第一个事件:
 //第二个参数为请求码,自行定义
        startActivityForResult(new Intent(MainActivity.this, SecondActivity.class), REQUEST_CODE1);
//第二个事件:
 startActivityForResult(new Intent(MainActivity.this, SecondActivity.class), REQUEST_CODE2);

  @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    //根据requestCode区分是事件1的返回还是事件2的返回
    //根据resultCode区分是第二个Activity还是第三个Activity
        //这里获取返回的数据
        data.getExtras().getString("result");
    }

第二个Activity关闭之前

 Intent intent = new Intent();
    //加入返回的数据
    intent.putExtra("result", "返回的数据");
   //这里有个结果码,也是自行定义
    SecondActivity.this.setResult(RESULT_CODE1, intent);
    SecondActivity.this.finish();

第三个Activity关闭之前

 Intent intent = new Intent();
    //加入返回的数据
    intent.putExtra("result", "返回的数据");
   //这里有个结果码,也是自行定义
    SecondActivity.this.setResult(RESULT_CODE2, intent);
    SecondActivity.this.finish();

上面提到了两个码,一个是请求码,一个是结果码。请求码的作用是为了区分从哪个事件开启的新activity。结果码是区分是哪个Activity结束后返回的结果。

  • activity生命周期

    这个的话我觉得小池laucherish这个里面的几幅图可以很容易的理解Activity的生命周期
    这里写图片描述


了解完生命周期,我们来看看activity的四种启动模式
  • launchMode
    这里写图片描述

    提到启动模式,首先得先了解任务栈。任务栈是用来统一管理Activity的,原则是后进先出。就像一个罐子,Activity是放进去的东西,先放进去的只有在最后才拿得出来。任务栈一般分为前台任务栈和后台任务栈,前台任务栈就是显示的时候的一个task,按home键之后他就变成后台任务栈了,很好理解。

    singleInstance 单一实例,就是只有一个实例,如果一个Activity(singleInstance) intent到这个Activity,那么不会创建新的实例。而且如果启动应用之后的task1里面的Activity不是singleInstance,那么跳转到singleInstance的Activity,那么就会多出一个task2用来装这个Activity,他跳转回task1中的Activity之后,返回键返回不到task2中的Activity来。
    singleTask 单一任务,也是一个Activity只有一个实例,那么跟singleInstance的区别在于,singleInstance是在单独的任务栈中启动Activity,而singleTask是只在一个栈中,如果要启动的这个Activity已经有了实例,那么会把覆盖在其上面的所有Activity都移除,让他到栈顶显示。因此,singleTask一般运用于首页的Activity。
    singleTop 单顶,就是如果要启动的Activity正好在栈顶,那么久重用,不会创建新实例。只要要启动的Activity不在栈顶,那么会跟默认的一样,创建一个新的实例。所以一般搜索界面的Activity会用到这种启动模式。
    standard 标准,这种是Activity默认的启动方式。启动一次就会创建一个新的实例,有时候跳转一个界面的按钮从A到B,你手速快点点击,就会发现,你按返回键的时候会多次出现B界面。这就是因为启动一次就新建一个。

  • 启动service

    首先了解一下service,service是一个在后台执行的组件,不与用户进行直接交互。其优先级低于前台应用,高于后台应用,这就使得他不容易被系统自动销毁。他的生命周期就三个,oncreate,onStartCommand和ondestory。service跟Activity一样也需要在清单文件中进行注册。

启动service分两种,一种是startService,一种是bindService。调用者使用startservice开启服务,服务已开启,两者之间就没有了关联,而且调用者也不能访问服务里面的方法。如果是bindService启动的服务,那么调用者会跟服务进行绑定,如果调用者销毁了,服务也挂了。

//用startservice启动服务
        Intent intent = new Intent(MainActivity.this, MyService.class);
        startService(intent);

//关闭服务
        Intent intent = new Intent(MainActivity.this, MyService.class);
        stopService(intent);

下面是用bindService启动服务

//开启服务
 Intent intent = new Intent(BindActivity.this, MyService.class);
        bindService(intent, conn, Context.BIND_AUTO_CREATE);

//通过ServiceConnection与服务进行连接
    private ServiceConnection conn = new ServiceConnection() {
        public void onServiceConnected(ComponentName name, IBinder service) {
            // TODO Auto-generated method stub
            //调用服务里面的方法
            String string = ((MyService.ServiceBinder) service).method();

        }

        @Override
        public void onServiceDisconnected(ComponentName name) {

        }
    };

下面是Service代码

public class MyService extends Service {
    private ServiceBinder serviceBinder=new ServiceBinder();

    @Override
    public IBinder onBind(Intent intent) {
        return serviceBinder;
    }


    class ServiceBinder extends Binder {


        public String method(){
            String s="服务里的一个方法";
            return s;
        }
    }

}


  • 发送广播

广播是所有应用都可以接收的一种消息,不管是同一个app的组件之间还是不同的app之间都可以通信。
要使用广播,首先得注册,注册分静态注册和动态注册。静态注册是直接在清单文件中注册
这里写代码片
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值