Android studio中的四大核心组件中的学习难点复习

Activity

在应用中一个activity可以用来表示一个界面,也可表示一个活动的开始,代表activity组件的启动,活动结束则代表一个activity的生命周期的结束。

activity状态表现
Resumed处于栈的最顶端,可视且可互动
Paused被另一个透明或Dialog样式的activity覆盖时的状态,其状态可视但不可交互
Stopped当前activity被另一个activity覆盖,失去焦点且不可视。
/**
     * 在onCreate方法之后调用,用于显示揭秘那,但用户不能进行交互
     */
    @Override
    protected void onStart() {
        super.onStart();
        System.out.println("MainActivity-onStart");
    }

    /**
     * 当一个stopped状态的activity被返回时调用,之后再调用onResume
     */
    @Override
    protected void onRestart() {
        super.onRestart();
        System.out.println("MainActivity-onRestart");
    }

    /**
     * 在onStart方法后调用,该方法执行完成后,用户可进行交互,当前Activity进入resumeed状态
     * 当一个pasued状态的activity被重新返回时,会再次调用,让activity进入运行状态
     */
    @Override
    protected void onResume() {
        super.onResume();
        System.out.println("MainActivity-onResume");
    }

    /**
     * 当其他activity(透明或窗口模式)进入时,该方法会被调用,让当前activity进入pasused状态(暂停状态)
     * 当前activity可视但不可交互,如果其他更高优先级的app需要内存时,当前activity可能会被销毁(kill)
     * 当前activity被返回时会调用onResume方法
     */
    @Override
    protected void onPause() {
        super.onPause();
        System.out.println("MainActivity-onPause");
    }

    /**
     * 当其他activity完全覆盖该activity时,会被调用,当前activity进入stopped状态(停止状态)
     * activity不可见不可交互,如果其他更高优先级的app需要内存时,当前activity可能会被销毁(kill)
     * 当前activity被返回时会调用onStart方法
     */
    @Override
    protected void onStop() {
        super.onStop();
        System.out.println("MainActivity-onStop");
    }


    /**
     * 当前activity被销毁时调用,通常在该方法中用来释放资源,当前activity销毁
     */
    @Override
    protected void onDestroy() {
        super.onDestroy();
        System.out.println("MainActivity-onDestroy");
    }

Activity的生命周期图
在这里插入图片描述

Activity传递数据

public void  sendObjClick(View v){
        //要传递的对象
        Cat cat =new Cat();
        cat.name="皮卡丘";
        cat.age=2;
        cat.type ="英短";

        Intent intent =new Intent(this,MainActivityB.class);
        intent.putExtra("cat",cat);
        startActivity(intent);

    }

    public void sendClick(View v){
        //创建一个意图(想干什么)参数:上下文,要跳转的组件的字节码。
      Intent intent =new Intent(this,MainActivityB.class);
        String info =editText_info.getText().toString();
        //封装要传递的数据
       // Bundle data=new Bundle();
       // data.putString("info",info);
       // intent.putExtra("data",data);
        intent.putExtra("info",info);
        intent.putExtra("age",24);     //封装email
        startActivity(intent);      //启动新的Activity
    }

Action

 /**
     * 直接查找法(通过组件名称)
     * @param v
     */
    public void componentClick(View v){
        Intent intent =new Intent(this,MainActivity2.class);
 //       ComponentName componentName =new ComponentName(this,MainActivity2.class);
  //      intent.setComponent(componentName);

        startActivity(intent);
    }

    /**
     *使用间接法(通过action属性和category属性)
     * 在Activity的清单文件配置中,必须使用默认的类别
     * @param v
     */
    public void actionClick(View v){
        Intent intent =new Intent();
        intent.setAction("xxq.action.MY_ACTION");
        intent.addCategory("xxq.category.MY_CATEGORY");
        startActivity(intent);

    }

    /**
     * data属性,一般与action配合使用(此组合是最常见的使用方法)
     * @param v
     */
    public void dataClick(View v){
        Intent intent =new Intent();
//        intent.setAction("xxq.action.MY_ACTION");
        intent.setAction(Intent.ACTION_VIEW);
        Uri data = Uri.parse("http://www.baidu.com");
//        intent.setData(data);  会使type属性设置为null;
//        intent.setTypeType);  会使data属性设置为null;
        //要使用data和Type,必须使用以下方法,匹配对必须两者同时匹配才能通过;
        intent.setDataAndType(data,"text/html");
        startActivity(intent);

    }
    public void flagClick(View v){
        Intent intent =new Intent(this,MainActivity5.class);
        //设置activity的启动模式
        //intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 在新的任务栈中启动activity,如果有,那么就在本任务中执行启动
        //FLAG_ACTIVITY_NEW_TASK 相当于singleTask
        //FLAG_ACTIVITY_CLEAR_TOP 相当于singleTop
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(intent);
    }

Bind Service

应用程序组件(客户端)通过调用bindService()方法能够绑定服务,然后Android系统会调用服务的onBind()回调方法来返回一个跟服务端交互的IBinder对象。
该绑定是异步的,bindService()立即返回,并且不会给客户端返回IBinder对象。
客户端如需接收IBinder对象就必须创建一个ServiceConnection类的实例,并将其传递给bindService()方法。
注意:只有Activity,Service和内容提供器(content provider)可以绑定服务

/**
 * 绑定服务:
 * 通过绑定服务来实现功能的步骤:
 * 1.客户端通过bindService方法来绑定一个服务对象,如果绑定成功,会回调用ServiceConnection端口方法onServiceConnected
 * 2.通过Service组件来暴露业务接口
 * 3.服务端通过创建一个*。aidl文件来定义一个可以被客户端调用的业务接口
 * 一个aidl文件
 * (1)不能有修饰符,类似接口的写法
 * (2)支持类型:基本数据类型,String,CharSequence,List<String>,Map,自定义类型
 *         自定义类型:
 *         实现一个aidl文件声明该类型;
 *         在其他aidl文件中使用,必须要使用import
 * 4.服务端需要一个业务接口的实现类,通常会使用extends Stub类
 * 5.通过Service的onBind方法返回被绑定的对象
 * 6.客户端如果绑定成功,就可以像调用自己的方法一样的调用远程的业务方法。
 *
 */

public class MyBoundService extends Service {
    public MyBoundService() {
    }

    @Override
    public void onCreate() {
        super.onCreate();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
    }

    @Override
    public boolean onUnbind(Intent intent) {
        return super.onUnbind(intent);
    }

    @Override
    public IBinder onBind(Intent intent) {
       return  new IMImpl();
    }
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值