1郊楣、 android 修改了系統(tǒng)的顯示大小之后摇展,再次打開應(yīng)用會(huì)閃退
解決方案:修改此處代碼 android/app/src/main/java/xxx/MainActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
...
super.onCreate(null);? ?// 此處將savedInstanceState修改為null
...
}
2缨睡、調(diào)用patch類型的方法報(bào)400錯(cuò)誤
解決方案: 把網(wǎng)絡(luò)請求中Method的類型,從patch改為PATCH
3饿序、從A頁面跳轉(zhuǎn)到B頁面后劳澄,再刷新A頁面
正常情況下,從A頁面跳轉(zhuǎn)到B頁面袁翁,在B頁面修改了一些數(shù)據(jù)之后再返回A頁面柴底,A頁面不會(huì)自動(dòng)刷新,因?yàn)榇藭r(shí)的props和state都沒變化
解決方案:在A頁面的componentDidMount生命周期里加監(jiān)聽
A.tsx
componentDidMount(): void {
????subscription: any = null;
????...
????this.subscription = DeviceEventEmitter.addListener('hpsaDeviceListRefresh', () => {
? ? ? ? ...
? ? }
...
}
// 記得銷毀前移除監(jiān)聽
componentWillUnmount(): void {
? ??this.subscription && this.subscription.remove();
}
4梦裂、android通過包名打開另一個(gè)app
Linking.openURL(url) 這種方式在ios上沒有問題似枕,打開應(yīng)用市場也沒有問題,通過scheme打開另一個(gè)app也可以年柠,但是只有一個(gè)包名的情況下凿歼,react native無法直接打開另一個(gè)app
解決方案: 寫原生方法
通過這里我們可以知道react native怎么調(diào)用原生里的方法,這里只寫原生代碼
xxxActivity.java
private final ReactApplicationContext reactContext;
public HpsaMedalliaActivity(ReactApplicationContext context) {
? ??super(context);
? ? ?...
? ??this.reactContext = context;
}
// 根據(jù)包名檢查手機(jī)中是否安裝了此應(yīng)用
@ReactMethod
public void checkPackInfo(String packageName, Callback callback) {
? ??PackageInfo packageInfo = null;
????try {
? ??????packageInfo = this.reactContext.getPackageManager().getPackageInfo(packageName, 0);
? ? ? ? // 回調(diào)函數(shù)冗恨,react native可以傳入一個(gè)回調(diào)函數(shù)獲取檢查結(jié)果
? ??????callback.invoke(packageInfo != null);
? ??} catch (PackageManager.NameNotFoundException e) {
? ??????// 回調(diào)函數(shù)
? ??????callback.invoke(false);
? ??}
}
// 通過包名打開應(yīng)用
@ReactMethod
public void openApplication(String packageName) {
? ??PackageManager pm = this.reactContext.getPackageManager();
? ??try {
? ??????this.reactContext.startActivity(pm.getLaunchIntentForPackage(packageName));
? ??} catch (Exception e) {
? ??????e.printStackTrace();
? ??}
}
react native代碼
NativeModules.xxxActivity.checkPackInfo(packageName, (result) => {
? ? if (result) {
? ? ? ??NativeModules.xxxActivity.openApplication(packageName);
? ? } else {
? ? // 打開應(yīng)用市場或者其他邏輯
? ? }
}