1. 应用程序生命期,Ability生命期是怎样的?Ability, AbilitySlice, AbilityPackage三者是什么样的关系
Ability是应用能力的抽象,分为FA与AA。FA提供与用户交互的能力,可以包含一组AbilitySlice, 每一个页面用一个AbilitySlice实例表示,而AA提供Service(后台服务)与Data模板(数据管理)。FA与AA可以再conifg.json的Ability注册中区分,通过type字段来指定。
AbilityPackage相当于安卓的application
Ability的生命周期
onStart()
当系统首次创建Page实例时,触发该回调。对于一个Page实例,该回调在其生命周期过程中仅触发一次,Page在该逻辑后将进入INACTIVE状态。开发者必须重写该方法,并在此配置默认展示的AbilitySlice。例如super.setMainRoute(FooSlice.class.getName());
onActive()
Page会在进入INACTIVE状态后来到前台,然后系统调用此回调。Page在此之后进入ACTIVE状态,该状态是应用与用户交互的状态。Page将保持在此状态,除非某类事件发生导致Page失去焦点,比如用户点击返回键或导航到其他Page。
当此类事件发生时,会触发Page回到INACTIVE状态,系统将调用onInactive()回调。此后,Page可能重新回到ACTIVE状态,系统将再次调用onActive()回调。因此,开发者通常需要成对实现onActive()和onInactive(),并在onActive()中获取在onInactive()中被释放的资源。
onInactive()
当Page失去焦点时,系统将调用此回调,此后Page进入INACTIVE状态。开发者可以在此回调中实现Page失去焦点时应表现的恰当行为。
onBackground()
如果Page不再对用户可见,系统将可能根据资源状况调用此回调,此后Page进入BACKGROUND状态。开发者应该在此回调中释放Page不可见时无用的资源,或在此回调中执行较为耗时的状态保存操作。
onForeground()
处于BACKGROUND状态的Page仍然驻留在内存中,当重新回到前台时(比如用户重新导航到此Page),系统将先调用onForeground()回调使Page回到INACTIVE状态,然后调用onActive()回调使Page回到ACTIVE状态。开发者应当在此回调中重新申请在onBackground()中释放的资源。
onStop()
此回调表示系统正在销毁Page
2. HiLog接口的用法说明
提供的快速查看LOG的方法,
具体用法如下
private static final HiLogLabel LABEL_LOG = new HiLogLabel(0, 0, “LogUtils“);
该方法提供log打印的属性
private static final String LOG_FORMAT = "%{public}s: %{public}s";
该方法提供log打印出的信息的格式
HiLog.warn(LABEL_LOG, LOG_FORMAT, tag, msg);
该方法提供警告类型的打印信息,tag为用户定义的TAG,msg为打印信息
3.socket接口的用法说明
socket接口位于rt_java包中,用法与java的socket完全一致。例如初始方法 Socket(String host, int port),连接host地址port端口。获取流方法public InputStream getInputStream(), pulic OutputStream getOutputStream()。
鸿蒙sdk下提供了网络DatagramSocket 进行数据传输 方式步聚为
调用NetManager.getInstance()获取网络管理的实例对象。
调用NetManager.getDefaultNet()获取默认的数据网络。
调用NetHandle.bindSocket()绑定网络。
使用socket发送数据
InetAddress address = netHandle.getByName("www.baidu.com");
DatagramSocket socket = new DatagramSocket();
netHandle.bindSocket(socket);
byte[] buffer = new byte[1024];
DatagramPacket request = new DatagramPacket(buffer, buffer.length, address, port);
// 发送数据
socket.send(request);
4. 应用程序权限设置说明
开发者需要再config.json文件中的reqPermissions字段声明需要的权限,支持多个权限同时申请
采用json的list格式
"reqPermissions": [
{
"reason": "",
"name": "harmonyos.permission.SET_WIFI_INFO",
"used-scene": {
"ability": [
".MainAbility"
],
"when": "inuse"
}
},
.......]
其中name字段必选 为权限名称
reason字段可选 让申请权限为user_grant时,则为必选,用于描述申请权限的原因
used-scene字段可选,让申请权限为user_grant时,则为必选 ability字段填写ability的名称,when是使用时机 inuse(使用时),always(始终)
user_grant权限为动态监测权限,每次执行操作都会检查自身是否有该权限。有才可继续执行,否则应用需要请求用户授予权限。
调用方法checkSelfPermission查询权限是否已经授予,如果授予那么结束申请流程,如果没有那么进入申请流程, 调用canRequestPermission是否可动态申请。如果不能申请结束,如果可以那么调用requestPermissionFromUser动态申请权限,并且再回调操作中得到申请的结果。
5、TimeZone.getAvailableIDs() 获取可设time zone的完整列表。
6、在config.json文件中增加权限android.permission.SET_TIME_ZONE。