wb安卓Activity

Activity

Android四大组件之一
Activity可以理解为用户打开一个app界面就称为一个Activity,提供了用户和屏幕之间的互动,以便于用户进行操作,一个Activity可以充满整个屏幕,也可以遮住屏幕的一部分

Activity7个生命周期

  1. onCreate:创建一个Activity,做一些数据初始化操作

  2. onStart:由不可见变为可见

  3. onResume:可以与用户进行交互,位于栈顶

  4. onPause:暂停,启动或者恢复另一个活动时调用

  5. onStop:停止,变为不可见

  6. onRestart:由停止状态变为运行状态

  7. onDestroy:销毁

Activity作用

  • 提供用户界面,与用户交互
  • 当出现多个Activity,就会出现这个数据结构概念(任务栈),先进后出
  • 状态变化:

​ 生命周期回调方法

Activity的创建

  • 使用普通类继承Activity创建
  1. 需要手动创建对应的XML布局文件
  2. 在项目清单中注册Activity
  3. 在onCreate中设置内容视图
  • 基于AS模板创建

Activity启动

  • 在元素里添加元素

​ <action adnroid:name:“android.intent.action.MAIN” />

​ <category android:name:“android.intent.category.LAUNCHER”/>

  • 多个Activity都设置成启动Activity时

​ 先后顺序来确定

  • standard模式

​ 特点:

​ Activity的默认启动模式

​ 每启动一个Activity就会在栈顶创建一个新的实例。

​ 缺点:当Activity已经位于栈顶 时,而再次启动Activity时还需要在创建一个新的实例,不能直接复用。

  • singleTop模式

​ 特点:该模式会判断要启动的Activity实例是否位于栈顶,如果位于栈顶直接复用,否则创建新的实例。 例如:浏览器的书签

​ 缺点:如果Activity并未处于栈顶位置,则可能还会创建多个实例

  • singleTask模式

​ 特点:使Activity在整个应用程序中只有一个实例。每次启动Activity时系统首先检查栈中是否存在当前Activity实例,如果存在则直接复用,并把当前的Activity之上所有实例全部出栈。例如:浏览器主界面

  • singleinstance模式

​ 特点:该模式的Activity会启动一个新的任务栈来管理Activity实例,并且该势力在整个系统中只有一个。无论从哪个任务栈中启动该Activity,都会是该Activity所在的任务栈转移到前台,从而使Activity显示。主要作用是为了在不用程序中共享一个Activity

内容大部分来自网络
自己收集的

Android 平台上进行 AMR-WB 编码,可以使用 Android 系统提供的 MediaCodec API 实现。以下是一个简单的 AMR-WB 编码示例: ```java public class AMRWBEncoder { private MediaCodec mediaCodec; private ByteBuffer[] inputBuffers; private ByteBuffer[] outputBuffers; private MediaCodec.BufferInfo bufferInfo; private int sampleRate; private int bitRate; private int frameSize; private int channelCount; public AMRWBEncoder(int sampleRate, int bitRate) throws IOException { this.sampleRate = sampleRate; this.bitRate = bitRate; this.frameSize = sampleRate / 100; this.channelCount = 1; // 单声道 this.mediaCodec = MediaCodec.createEncoderByType("audio/amr-wb"); MediaFormat mediaFormat = MediaFormat.createAudioFormat("audio/amr-wb", sampleRate, channelCount); mediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, bitRate); mediaFormat.setInteger(MediaFormat.KEY_MAX_INPUT_SIZE, frameSize * channelCount * 2); mediaCodec.configure(mediaFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE); mediaCodec.start(); inputBuffers = mediaCodec.getInputBuffers(); outputBuffers = mediaCodec.getOutputBuffers(); bufferInfo = new MediaCodec.BufferInfo(); } public byte[] encode(byte[] input) { int inputBufferIndex = mediaCodec.dequeueInputBuffer(-1); if (inputBufferIndex >= 0) { ByteBuffer inputBuffer = inputBuffers[inputBufferIndex]; inputBuffer.clear(); inputBuffer.put(input); mediaCodec.queueInputBuffer(inputBufferIndex, 0, input.length, 0, 0); } int outputBufferIndex = mediaCodec.dequeueOutputBuffer(bufferInfo, 0); if (outputBufferIndex >= 0) { ByteBuffer outputBuffer = outputBuffers[outputBufferIndex]; byte[] output = new byte[bufferInfo.size]; outputBuffer.get(output); mediaCodec.releaseOutputBuffer(outputBufferIndex, false); return output; } else if (outputBufferIndex == MediaCodec.INFO_OUTPUT_BUFFERS_CHANGED) { outputBuffers = mediaCodec.getOutputBuffers(); } else if (outputBufferIndex == MediaCodec.INFO_OUTPUT_FORMAT_CHANGED) { // TODO: 输出 format 变化,这里省略 } return null; } public void release() { mediaCodec.stop(); mediaCodec.release(); } } ``` 使用时,首先创建一个 AMRWBEncoder 对象,然后调用其 encode() 方法对音频数据进行编码,最后调用 release() 方法释放资源。例如: ```java AMRWBEncoder encoder = new AMRWBEncoder(16000, 16000); byte[] input = // 音频数据,PCM 格式 byte[] output = encoder.encode(input); encoder.release(); ``` 需要注意的是,这里的输入音频数据必须是 PCM 格式,如果是其他格式需要先进行格式转换。另外,AMR-WB 编码是有损的,输出的音频质量与压缩比有关,需要根据实际需求选择合适的比特率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值