假如在当前的Activity上有音频数据,通过back返回或者把应用退出后,这个数据如何保存?再进入该Activity后,该数据如何重新加载?
在当前Activity上有音频数据时,可以在Activity的生命周期方法onPause()中将数据保存到本地存储中,例如使用SharedPreferences或者文件存储等方式。当再次进入该Activity时,在生命周期方法onResume()中读取保存的数据并重新加载。
Activity提供了一个startActivityForResult(Intent intent, int requestCode) 方法,该方法也用于启动Activity,并且这个方法可以在当前Activity销毁时返回一个结果给上一个Activity,实现数据回传功能。在实际开发中这种功能很常见,如发朋友圈时,进入图库选择好照片后,会返回到发表状态页面并带回所选的图片信息。
在一个Activity中很可能调用startActivityForResult()方法启动多个不同的Activity,每一个Activity返回的数据都会回调onActivityResult()这个方法,因此,首先要做的就是检查requestCode的值来判断数据来源,确定数据是从哪一个Activity返回的,然后通过resultCode的值来判断数据处理结果是否成功,最后从data中取出数据,这样就完成了Activity数据返回的功能。
持久化存储,对于音频文件来说考虑进行SD卡或者应用内文件存储,千万别存储到系统文件那边去,例如图库这种。
比如ffmpeg解封装视频,传递给它一个URL,你在图库的文件拿到URL也不行,你没权限直接操作这个文件,只能通过内容共享者获取到它的流,将文件写到SD卡或者应用内文件目录,之后再将URL丢给FFmpeg。
同理,看看你用什么播放,用opensl el还是用mediaRecoder,它接收什么类型的音频文件,一般是RAW或者assets或者我说的自己能完全读写权限下的目录URL。