• JNI简单配置的使用&&我的云音乐


    一、在CMakeLits.txt配置

    1.添加头文件路径                        include_directories(include)

    2.设置三方库所在的位置             set(FF ${CMAKE_CURRENT_SOURCE_DIR}/库的所在路径)

    3.添加所在的库                           add_library(avcodec(三方库的名字) SHARED IMPORTED)

    4. 动态链接添加的库                   target_link_libraries               

    build.gradle(app)externalNativeBuild {

        cmake {
    cppFlags "-std=c++11"
    }
    ndk{
    abiFilters "armeabi-v7a x86不同的版本"
    }
    }

    //设置资源文件路径
    sourceSets {
    main{
    jniLibs.srcDirs = ['libs'] ---->libs是放三方的so文件的,和src同一级目录
    }
    }

     
    5.常用的命令去快速搜索
     grep 关键字 . -srn : 所有代码包含这个关键字
     find . -name CallFeaturesSettingsTree.java(文件名字) : 当前目录下搜索这个文件的位置
    keytool -printcert -jarfile xxx.apk ------> 查看app的MD5一些信息

     

     

    二、引导界面 : ViewPager+Fragment来实现
      
      

        adapter.registerDataSetObserver(indicator.getDataSetObserver()); ----->去监听数据发生变化
      

    三、侧滑列表 : DrawerLayout(侧滑窗体) + ScrollView

      

      
    四、首页界面的搭建 :

            

      我的音乐,我的推荐,我的视频三个AppBar构建  :  AppBarLayout + ViewPager + Fragment

      我的推荐之推荐、朋友、电台界面构建 : MagicIndicator + ViewPager + Fragment

      推荐界面的搭建 : GridLayoutManager + RecyclerView

      歌单的实现 : 自定义LineLayout 重写OnMeasure 实现宽高相等, RelativeLayout 包裹图片()和文字 + CardView(设置为圆角和阴影的样子)

      

      轮播广告以及下面四个的实现 :  RelativeLayout作为主父局, 定义一个背景为红色的View,上面嵌套一个Banner(轮播的控件),再实现下面四个属性

      

      五、onNewIntent 的使用以及注意事项

        解释 : 如果一个Activity已经启动过,并且存在当前应用的Activity任务栈中,为了防止它再次启动创建新的实例,就会走onNewInetnt这个方法

        1.当ActivityA的LaunchMode为SingleTop时:
          如果ActivityA在栈顶,且现在要再启动ActivityA,这时会调用onNewIntent()方法 ,生命周期顺序为:onCreate--->onStart--->onResume---onPause>onNewIntent--->onResume

        2.当ActivityA的LaunchMode为SingleInstance,SingleTask:如果ActivityA已经在堆栈中,那么此时会调用onNewIntent()方法,生命周期调用顺序为:

         onCreate--->onStart--->onResume---按下Home键>onPause--->onstop--->onNewIntent--->onRestart--->onstart--->onResume

        3.这里面有个注意事项

         @Override
         protected void onNewIntent(Intent intent) {
              super.onNewIntent(intent);
              setIntent(intent);//设置新的intent
              int data = getIntent().getIntExtra("tanksu", 0);//此时的到的数据就是正确的了
          }
        在这里,如果你没有调用setIntent()方法的话,则getIntent()获取的intent都只会是最初那个intent,这里很重要

        

    PlayListManagerImpl  监听广播接收器  onNewIntent

    https://www.kancloud.cn/alex_wsc/androids#/catalog   ----->一篇很不错的网址

    https://www.jianshu.com/p/edcca8d3dd00  -------->OOM的问题,lottie框架解决帧动画

    http缓存方式 : 对比缓存和强制缓存

      

     
  • 相关阅读:
    two pointers思想 ---- 利用两个i, j两个下标,同时对序列进行扫描,以O(n)复杂度解决问题的一种思想
    二分法
    区间贪心
    error C2825: '_Iter': 当后面跟“::”时必须为类或命名空间 -- 原因可能是参数错误或者自定义函数名和库函数名冲突
    模态窗口的定时关闭
    数据结构(二十二)二叉树遍历算法的应用与二叉树的建立
    数据结构(二十一)二叉树的非递归遍历算法
    数据结构(二十)二叉树的递归遍历算法
    数据结构(十九)二叉树的定义和性质
    数据结构(十八)树的定义与存储结构
  • 原文地址:https://www.cnblogs.com/liunx1109/p/11680800.html
Copyright © 2020-2023  润新知