Android-tech

文章涵盖了Android开发中的多个重要知识点,包括不同类型的动画(如ViewAnimation和PropertyAnimator),Fragment的onActivityResult交互,广播的发送与接收,ReactNative模块的创建和事件通信,原生UI组件的使用。此外,还讨论了多工程结构,WebView的配置,文件存储的不同路径以及媒体播放的架构。最后提到了反编译工具,如jadx。
摘要由CSDN通过智能技术生成

遇到的Android相关知识点的记录:

  • cheatsheet
  • 需要按图索骥持续了解的

动画

  • View Animation 包括 Tween Animation(补间动画):scale、rotate等 和 Frame Animation(逐帧动画);
  • Property Animator 包括 ValueAnimator 和 ObjectAnimation;
    view anim 作用于视图控件,而Prop anim作用于控件属性

颜色

不透明1 -> 全透明0
alpha 完全透明 0

Fragment

谈谈Fragment中的onActivityResult

在Fragment中使用startActivityForResult之后,onActivityResult的调用是从activity中开始的(即会先调用activity中的onActivityResult)。

一.只嵌套了一层Fragment(比如activity中使用了viewPager,viewPager中添加了几个Fragment)
在这种情况下要注意几个点:

  1. 在Fragment中使用startActivityForResult的时候,不要使用getActivity().startActivityForResult,而是应该直接使startActivityForResult()。
  2. 如果activity中重写了onActivityResult,那么activity中的onActivityResult一定要加上super.onActivityResult(requestCode, resultCode, data)。

如果违反了上面两种情况,那么onActivityResult只能够传递到activity中的,无法传递到Fragment中的。
没有违反上面两种情况的前提下,可以直接在Fragment中使用startActivityForResult和onActivityResult,和在activity中使用的一样。

广播

发广播:sendBroadcast(Intent(Action))
系统广播
自己发自定义广播
接收:

  • 静态注册<receiver <intent-filter>>
  • registerReceiver(BroadcastReceiver, IntentFilter)

RN

原生模块
供JS调用
extends ReactContextBaseJavaModule

@ReactMethod
eg: void encodeMD5(String content, Callback callback)
回调函数

注册模块
implements ReactPackage
add( packages add ( modules ) )

为了让你的功能从 JavaScript 端访问起来更为方便,通常我们都会把原生模块封装成一个 JavaScript 模块(非必须)

发送事件到JS

reactContext
    .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
    .emit(eventName, params);

Add the listener for onActivityResult
reactContext.addActivityEventListener(mActivityEventListener);

监听生命周期
reactContext.addLifecycleEventListener(this);

原生UI组件

组件化

多工程

WebView

设置了自定义的WebViewClient,应用就会从默认调用外部浏览器打开网址变为默认在本地WebView上打开网址。

shouldOverrideUrlLoading(WebView view, String url)使用:
默认返回false,想控制权交给app时返回true,可解析url重定向(处理url)。

注意

recyclerview bindView时,if else两种情况都要处理,否则ui被覆盖

if (song.needShowSource()) {
    musicSource.setVisibility(View.VISIBLE);
    musicSource.setImageResource(song.getSourceImgRes());
} else {
    musicSource.setVisibility(View.GONE);
}

文件存储

Tag对应的路径方法
root-path根目录/
files-path/data/user/0/<package_name>/files 或者/data/data/<package_name>/filescontext.getFileDir()
cache-path/data/user/0/<package_name>/cache 或者 /data/data/<package_name>/cachecontext.getCacheDir()
external-path/storage/emulated/0或者/sdcard/getExternalStorageDirectory()
external-files-path/storage/emulated/0/Android/data/<package_name>/files 或者 /sdcard/Android/data/<package_name>/filesgetExternalFilesDir
external-cache-path/storage/emulated/0/Android/data/<package_name>/cache 或者 /sdcard/Android/data/<package_name>/cachegetExternalCacheDir()

媒体播放

媒体应用架构概览

媒体控制器会隔离您的界面。您的界面代码只与媒体控制器(而非播放器本身)通信。媒体控制器会将传输控制操作转换为对媒体会话的回调(session callbacks)。每当会话状态发生变化时,它也会接收来自媒体会话的回调。

反编译

工具:jadx

其它工具:

  1. 如果要反编译 app 的代码,就使用 dex2jar + jd-gui

  2. 如果要反编译 app 的资源,就使用 apktool

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值