Android項目遇到的技術問題記錄(好的文章收藏一下)

  1. 微信支付的問題

    a.項目一般有測試環境和線上壞境兩個環境(用release版本的簽名),發佈時,更換測試壞境簽名爲線上簽名,之後支付一直不成功,配置是正確的,這是微信留下的坑,網上有很多清理微信緩存之類的就行,可是試了不行,乾脆把微信直接卸載就可以了。

    b. 有時微信支付成功一次之後再也不會成功了,這次要去微信應用中心查看簽名的情況,一定是簽名配置錯誤了。

  2. carame2 api在小米6上(先預覽,再跳轉到其他頁面後回來預覽頁面),會有綠色屏幕問題。目前暫沒有好的處理方法,直接應過時的carame api替換。

  3. 多個fragment切換,有時候在當前fragment會看到底下的fragment(https://blog.csdn.net/changsimeng/article/details/73799948

    首先,Android管理Fragment有兩種方式,使用add、hide、show的方式和replace方式,兩種方式各有優缺點。
    replace方式
    如果使用這種方式,是可以避免重疊的問題,但是每次replace會把生命週期全部執行一遍,如果在這些生命週期函數 里拉取數據的話,就會不斷重複的加載刷新數據,所以我們並不推薦使用這種方式。

    add、hide、show的方式
    雖然這種方式避免了可能重複加載刷新數據的問題,但是會出現重疊的問題。

    原因:
    當系統內存不足,Fragment 的宿主 Activity 回收的時候,Fragment 的實例並沒有隨之被回收。Activity 被系統回收時,會主動調用 onSaveInstance() 方法來保存視圖層(View Hierarchy),所以當 Activity 通過導航再次被重建時,之前被實例化過的 Fragment 依然會出現在 Activity 中,此時的 FragmentTransaction 中的相當於又再次 add 了 fragment 進去的,hide()和show()方法對之前保存的fragment已經失效了,所以就出現了重疊。
    然而我們還是推薦使用這個,我們可以解決。

    重寫onAttachFragment,重新讓新的Fragment指向了原本未被銷燬的fragment,它就是onAttach方法對應的Fragment對象

     @Override
     public void onAttachFragment(Fragment fragment) {
         if (tab1 == null && fragment instanceof Tab1Fragment)
             tab1 = fragment;
         if (tab2 == null && fragment instanceof Tab2Fragment)
             tab2 = fragment;
         if (tab3 == null && fragment instanceof Tab3Fragment)
             tab3 = fragment;
         if (tab4 == null && fragment instanceof Tab4Fragment)
             tab4 = fragment;
     }

     

  4. fragment有時候底部可見上一個fragment(https://blog.csdn.net/hepann44/article/details/80493490

  5. 同時添加三個fragment會重疊在一起,那個fragments時空的,所以hide不會生效
    解決:最後添加的那個fragment添加白色背景,把其他fragment掩蓋

  6. CoordinatorLayout ,AppBarLayout,recyclerview配合使用。
    recyclerview第一條不能隱藏,不然會只要滑動了recyclerview就不能滑動AppBarLayout,可以添加一條高度的爲0的header。

  7. 支付寶支付和阿里雲推送UTDID衝突

    解決:https://help.aliyun.com/knowledge_detail/59152.html?spm=5176.7851421.2.9.DI68G0

    可以通過exclude關閉其他產品SDK對UTDID的傳遞性依賴,示例如下所示:
    implementation ('com.xxx:xxx.xxx:1.0.1') {
    exclude (module: 'alicloud-android-utdid')
    }
    或者:
    可下載並集成 剝離UTDID的支付寶SDK,保留阿里雲平臺的UTDID包。

  8. drawable不要在成員變量是上聲明賦值
    val bgBlue= ContextCompat.getDrawable(mContext,R.drawable.chat_bg_blue)
    val bgGray= ContextCompat.getDrawable(mContext,R.drawable.chat_bg_gray)
    在adapter裏複用會出問題,特別是寬高有變化的時候

  9. startService在Android8.0上拋異常(https://juejin.im/post/5b8b6f476fb9a019f0071379
    解決:JobScheduler替代後臺服務
    官方文檔解釋爲,用於處理被加入到job或service任務的一個輔助工具,8.0以下被當作普通的Intent使用startSerivce()啓動service來執行。8.0以上任務被作爲job用jobScheduler.enqueue()方法來分發

  10. 原生Geocoder根據經緯度獲取位置不穩定
    解決:web api代替

 

  感謝丁小胖https://www.jianshu.com/p/a3923c1b535f

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章