您的位置:首页 > 移动开发 > Android开发

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

2019-04-08 11:14 417 查看

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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: