【笔记记录】2020-06-05
【安卓】
1.程序A能否接收到程序B的广播:使用全局的 BroadCastRecevier 能进行跨进程通信, LocalBroadCastRecevier 只限于本进程的广播间通信
#### 【例子】 > 注册本地广播 ``` // 实例化一个广播接收器 mBroadcastReceiver = new BroadcastReceiver () { @Override public void onReceive(Context context, Intent intent) { // TODO 接收到广播时的逻辑 Log.d (TAG, "onReceive: " + intent.getStringExtra ("name")); } }; // 实例化IntentFilter IntentFilter intentFilter = new IntentFilter (); intentFilter.addAction ("com.github.xjx.test"); // 注册本地广播 LocalBroadcastManager.getInstance (this).registerReceiver (mBroadcastReceiver, intentFilter); ``` #### 【例子】 > 发送本地广播 ``` Intent intent = new Intent (); intent.setAction ("com.github.xjx.test"); intent.putExtra ("name", "Jerry"); LocalBroadcastManager.getInstance (MainActivity.this).sendBroadcast (intent); ```
2.MediaMuxer
构造: 1. MediaMuxer(String path, int format): path:输出文件的全路径名称,format:输出文件的格式,当前支持MP4和3GP格式,使用 MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4 方法: 1. int addTrack(@NonNull MediaFormat format) 添加通道,我们更多的是使用 MediaCodec.getOutpurFormat()或 MediaExtractor.getTrackFormat(int index)来获取MediaFormat,也可以自己创建。 2. start() 当我们添加完所有音视频轨道之后,需要调用这个方法告诉Muxer,我要开始写入数据了。 3. writeSampleData(int trackIndex, ByteBuffer byteBuf, MediaCodec.BufferInfo bufferInfo): 用于向Muxer写入编码后的音视频数据,trackIndex是我们addTrack()的时候返回的ID,byteBuf便是要写入的数据,而bufferInfo是跟这一帧byteBuf相关的信息,包括时间戳、数据长度和数据在ByteBuffer中的位移。 4. stop() 与start()相对应,用于停止写入数据,并生成文件。 5. release() 释放Muxer资源
3.TabLayout
例子: uiTab.addTab(uiTab.newTab().setText("已租借")) uiTab.addTab(uiTab.newTab().setText("待还书")) uiTab.addTab(uiTab.newTab().setText("已还书")) uiTab.addTab(uiTab.newTab().setText("已转售")) uiTab.addOnTabSelectedListener(......) 问题: 1.如何代码触发选择 TabLayout 的某个Tab选择事件(模拟点击)? Tablayout.getTabAt(position).select();
4.[JVM] 运行时数据区
【区域】 1. 程序计数器 2. 虚拟机栈 3. 本地方法栈 4. 堆 5. 方法区 【程序计数器】 JVM中的程序计数器可以看做是当前线程所执行的字节码的行号指示器,每个线程都有一个程序计数器,这是JVM规范中唯一一个没有规定会导致OutOfMemory(内存溢出,下文简称OOM)的区域。 【虚拟机栈】 1. 每个Java方法在执行时,会创建一个“栈帧(stack frame)”,栈帧的结构分为“局部变量表、操作数栈、动态链接、方法出口”几个部分。 2. 方法调用时,创建栈帧并压入虚拟机栈,方法执行完毕,栈帧出栈并被销毁。 3. 虚拟机栈是线程隔离的,即每个线程都有自己独立的虚拟机栈。
5.[Kotlin] 字面常量
1. 123L 2. 0x0F 3. 0b00000001 笔记: 1.可以使用下划线分开数字
6.ViewAnimationUtils:创建揭露动画
#### 静态方法 ``` Animator createCircularReveal ( View view, int centerX, int centerY, float startRadius, float endRadius ) ``` #### 代码 ``` val mCircularReveal: Animator = ViewAnimationUtils.createCircularReveal( ucRoot, centerX, centerY, 0f, ucRoot.measuredHeight.toFloat() ) mCircularReveal.setDuration(1500).start() ```
7.[Frame] GroupedRecyclerViewAdapter
#### 简介
GroupedRecyclerViewAdapter可以很方便的实现RecyclerView的分组显示,
并且每个组都可以包含组头、组尾和子项;可以方便实现多种Type类型的列表,
可以实现如QQ联系人的列表一样的列表展开收起功能,还可以实现头部悬浮吸顶功能等。
#### 重要
★★★★★
8.[Kotlin] 数字类型
【简介】 1. Double:64bit 2. Float:32bit 3. Long:64bit 4. Int:32bit 5. Short:16bit 6. Byte:8bit 【关联】 1. 位运算只能在Int 和 Long类型上进行。 2. Int 和 Long 可以 toByte() 转为Byte类型。
9.如何模拟按下关机键
前提:进入su命令 命令:input keyevent [--longpress] 代码: input keyevent 26 笔记: 1. 26也可换KEYCODE_POWER 2. input keyevent 会把 down 和 up 一起发送,可加入 --longpress 来模拟长按事件。 相关: 1. sendevent device type code value:adb shell sendevent/dev/input/event2 1 116 1 2. adb shell monkey:可以模拟发送事件
10.连接对应设备的控制台:adb -s emulatorName shell
【后端】
1./etc/init.d:目录中存放的是一系列系统服务的管理(启动与停止)脚本。
2.crontab:定时任务,每个用户有一个文件对应定时任务。
【前端】
1.[Node] 模块概念:Node视一个JS文件为一个模块,每一个模块执行的时候都会注入一个module对象,模块可以通过访问module.exports对象从而导出数据或函数。
【其他】
1.SVN提交本地文件到服务器:svn commit 路径/文件 -m “msg”
2.SVN查看文件状态:svn status 路径
3.[Vim] 批量缩进:行号1,行号2>,一个>表示缩进一次,两个则缩进两次。
4.[SVN] 查看本地与服务器的差异:右键 -> TortoiseSVN -> Check for modifications -> 右击某个文件 -> Compare with base
5.pem存储格式:一种 base64 编码的存储格式,可以是证书、私钥、证书签名请求。
【英语】
Whenever the user clicks or touches any UI element like, a button, it is desirable to provide some kind of visual confirmation,
so that the user knows that their touch or click was successful. Responsive interaction encourages deeper **exploration** of
an app by creating timely, logical, and delightful screen **reactions** to the user input.
- exploration:/ˌekspləˈreɪʃn/,n. 探测
- reactions:/riˈækʃn/,n. 反应