React Native开发应该了解的Android基本知识

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wj610671226/article/details/88957550

React Native开发应该了解的Android基本知识

最近又开始做React Native项目,个人认为无论采用哪种跨平台的技术,都需要对原生技术有一定的了解,开发的时候才能对项目游刃有余。于是又将遗忘N久的Android基本知识捡起来,记录一下,加深印象,也方便后面查看。

  • Activity

Activity的4种状态:runing -> paused -> stopped -> killed
Activity相当于iOS中的ViewController
用法:
1、创建Activity
2、在AndroidManifext.xml中注册
3、设置布局文件

AndroidManifext.xml作用:
1、描述程序的基本属性
2、描述应用需要使用的权限信息
3、描述包含的应用组件(activity,service,broadcast等)的实现类

Activity的启动方法:
1、显示启动
明确指定要启动的Activity的class或者包名.activity类名
2、隐式启动
设置启动过滤器,通过指定的action或action和data属性,系统会查找符合条件的activity,并启动它

显示启动
// 第一种
Intent intent = new Intent();
intent.setClass(MainActivity.this, SecondActivity.class);
startActivity(intent);

// 第二种
Intent intent = new Intent();
// com.example.wangjie.testproject.SecondActivity = 应用包名.activityName
intent.setClassName(MainActivity.this, "com.example.wangjie.testproject.SecondActivity");
startActivity(intent);

// 第三种
Intent intent = new Intent();
intent.setComponent(new ComponentName(MainActivity.this, SecondActivity.class));
startActivity(intent);

// 隐式启动
// 需要在AndroidManifest.xml中配置SecondActivity
<activity android:name=".SecondActivity">
    <intent-filter>
        <action android:name="action.SecondActivity"></action>
        <category android:name="android.intent.category.DEFAULT"></category>
    </intent-filter>
</activity>
// 第一种
Intent intent = new Intent("action.SecondActivity");
startActivity(intent);

// 第二种
Intent intent = new Intent();
intent.setAction("action.SecondActivity");
startActivity(intent);

Activity的关闭:finish()

Action:代表系统中已经定义的一系列常用的动作
属性的值是一个字符串
通过setAction()方法或者清单文件中设置
当有多个Action匹配隐式启动的条件时,将会弹框选择

Category
指定当前动作Action被执行的环境
通过addCategory()方法或在清单文件中设置

常用值:
android.intent.category.DEFAULT
Android中默认的执行方式,按照普通Activity的执行方式
android.intent.category.LAUNCHER
设置该组件为当前应用启动器,通常配合action.MAIN使用

Activity的生命周期方法
生命周期分析:
Activity启动 -> onCreate() -> onStart() -> onResume()
点击Home键回到主界面(Activity不可见) -> onPause() -> OnStop()
再次回到原Activity时 -> onRestart() -> onStart() -> OnResume()
退出当前Activity时 -> onPause() -> onStop() -> onDestroy()

onCreate
onStart
onResume
onPause
onStop
onDestroy

Activity的启动模式
启动模式:决定生成的Activity是否重用,是否和其他Activity在同一个栈里
standard:默认的启动模式,每次激活Activity都创建Activity实例,放入任务栈
singleTop:如果某个Activity自己激活自己,即任务栈栈顶就是该Activity,则不需要创建,其余情况都要创建Activity
singleTask:如果需要激活的那个Activity在任务栈中存在实例,则将该Activity放到栈顶,并把该Activity之上的其余Activity出栈
singleInstance:只有一个实例,并且这个实例独立运行在一个task中,这个task只有这个实例,不允许有其他Activity存在

配置方法:在AndroidManifext.xml对应Activity节点中添加android:launchMode=“standard”

Activity之间的数据传递
1、通过intent.putExtra()传递数据。在第二个Activity中使用类似getIntent().getStringExtra()的方法获取参数
2、通过Bundle来传递数据,在第二个Activity中使用getIntent().getBundleExtra()的方法获取参数
3、通过实体类实现Serializable接口或者实现Parcelable接口来传递参数

Activity的数据回传
1、通过startActivityForResult()启动Activity
2、在第二个Activity中调用setResult();
3、然后重写onActivityResult(int requestCode, int resultCode, Intent data)方法获取回传的数据

Intent-filter中data匹配的规则
1、如果Intent没有指定Data相关的字段,只能匹配上没有指定Data的IntentFilter
2、如果一个Intent只指定了Uri但是没有Type(并且Type也不能够从Uri中分析出)只能匹配到仅指定了相应Scheme且没有指定Type的IntentFilter
3、如果一个Intent只指定了Type,但是没有指定Uri,它只能匹配到只指定了相应Type且没有指定Scheme的IntentFitler
4、如果一个Intent即有Uri又有Type,那么它会匹配上:
a.Uri和Type都匹配的IntentFilter;
b.首先Type要匹配,另外如果Intent的Uri是content:或file:,且IntentFilter没有指 定Scheme。(因为对于Android来讲content和file这二种Scheme是系统最常见也是用的最多的,所以就当成缺省值来对待)

scheme跳转协议
android中的scheme是一种页面内跳转协议,是一种非常好的实现机制,通过定义自己的scheme协议,可以非常方便跳转app中的各个页面;通过scheme协议,服务器可以定制化告诉App跳转那个页面,可以通过通知栏消息定制化跳转页面,可以通过h5页面跳转页面等。

布局方式
LinearLayout 线性布局
RelativeLayout 相对布局
FrameLayout 帧布局
TableLayout 表格布局

  • 服务Service

服务是Android四大组件之一,和Activity差不多,但是Service只能在后台运行。Service同样需要在AndroidManifext.xml注册才能使用。
Service同样可以通过Intent来启动
1、startService
2、bindService

// Service的生命周期
通过startService启动
onCreate()
onStartCommand()
onDestroy()
// 通过bindService
onBind()
onUnbind()

// 使用
1、自定义Service继承Service或者IntentService
Service不会开启子线程,所有操作都在主线程中,使用的时候需要停止
IntentService必须重写onHandleIntent方法,并且提供一个默认的无参构造函数,任务执行完成后服务自动销毁

startService
1、定义一个类继承Service
2、在Mainfest.xml中配置Service
3、使用Content的startService(Intent)方法启动该Service
4、不在使用时,调用stopService(Intent)方法停止该服务

bindService
1、创建BindService服务端,继承自Service并在类中,创建一个实现IBinder接口的实例对象并提供公共方法给客户端调用
2、从onBind()回调方法返回此Binder实例
3、在客户端中,从onServiceConnected()回调方法接收Binder,并使用提供的方法调用绑定服务

  • Broadcast Receiver

Broadcast是一种广泛应用在应用程序之间传输消息的机制,Android中我们要发送的广播内容是一个Intent,这个Intent中可以携带我们要传送的数据。
场景:同一app多个进程的不同组件之间的消息传递,不同app组件之间的通讯

种类:
Normal Broadcast: Context.sendBroadcast
System Broadcast: Context.sendOrderedBroadcast
Local Broadcast: 只在自身App内传播

实现广播
1、静态注册: 注册完成就一直运行
2、动态注册: 跟随activity的生命周期

广播机制
1、自定义广播接受者BroadcastReceiver,并覆写onReceive()方法
2、通过Binder机制向AMS(Activity Manager Service)进行注册
3、广播发送者通过Binder机制向AMS发送广播
4、AMS查找符合相应条件(IntentFilter/Permission等)的BroadcastReceiver,将广播发送到BroadcastReceiver相应的消息循环队列中
5、消息循环执行拿到此广播,回调BroadcastReceiver中的onReceive()方法

  • 应用资源的认识
/res/animator/   存放定义属性动画的XML文件
/res/anim/       存放定义不坚动画的XML文件
/res/color/     存放不同状态颜色列表的XML文件
/res/drawable/  存放各种位图文件,Drawable对象的XML文件
/res/layout     布局文件
/res/menu/      菜单资源
/res/raw/       存放各种原生资源,音视频文件,通过Reaources对象的openRawResources来获取该资源的二进制流,推荐将这些原生资源放到assets目录下,然后使用AssetManager来访问这些资源
/res/values/    存放各种简单的XML文件(colors.xml、dimens.xml、strings.xml、styles.xml等)
/res/xml/        存放任意的XML文件

猜你喜欢

转载自blog.csdn.net/wj610671226/article/details/88957550