精华内容
下载资源
问答
  • Android App 开发技术图谱 - 简书

    千次阅读 2017-10-27 16:39:16
    Android App 开发技术图谱 - 简书
    
    
    
    
      
    
    
      
      
      
    
      
      
      
      
      
      
      
      
    
        
    
      
      
      
      
      
      
      
      
    
      
      
    
        
      
      
    
      
      
      
      
      
      
      
    
      
      
      
      
      
      
      
      
    
      
      
      
      
    
      
      
      
      
    
    
        Android App 开发技术图谱 - 简书
    
      
    
    
      
    
      
    
      
          
          
          
          
          
          
    
      
      
      (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
      (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
      m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
      })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
    
      ga('create', 'UA-35169517-1', 'auto');
      ga('send', 'pageview');
    
    
    
      var _hmt = _hmt || [];
      (function() {
        var hm = document.createElement("script");
        hm.src = "//hm.baidu.com/hm.js?0c0e9d9b1e7d617b3e6842e85b9fb068";
        var s = document.getElementsByTagName("script")[0];
        s.parentNode.insertBefore(hm, s);
      })();
    
    
      
    
    
      
        
    
    

    Android App 开发技术图谱

    96
    anly_jun
    2016.07.26 23:32* 字数 744

    引言:
    今天偶然看到StuQ的技术图谱, 找了找竟然没有Android开发的. 想起之前自己弄了一个, 翻出来看看并不过时, 整理下发出, 大家共同进步.

    转载请注明出处: 简书/anly_jun/Android App 开发技术图谱

    图片比较大, 加载较慢, 请等待~~

    1240
    Android_App_Skill_Map

    1. 操作系统

    Windows/MacOSX/Linux

    2. 编程语言

    • Java
    • HTML/JS (Hybrid/Web App)
    • C/C++ (NDK)
    • SQL (DB)
    • Kotlin

    3. 开发工具

    3.1 IDE

    • Android Studio
    • Eclipse

    3.2 调试工具

    3.2.1 网络调试

    • Charles
    • Wireshark
    • Fiddler
    • tcpdump
    • Paw/Postman

    3.2.2 内存分析

    • monitor
    • MAT

    3.2.3 Android tools

    • adb
    • draw9patch
    • hierarchyviewer
    • uiautomatorviewer

    3.3 版本管理

    3.3.1 Git

    • Git命令
    • Github/GitLab

    3.3.2 SVN

    3.4 CodeReview

    • Gerrit
    • Github pull request

    3.5 Bug/任务管理

    • Redmine
    • JIRA
    • Bugzilla
    • Teambition
    • Tower

    3.6 编译工具

    • Gradle

    3.7 持续集成

    • Jenkins
    • Travis CI

    3.8 应用分发

    • 蒲公英
    • fir.im

    1. App基础

    1.1 基本组件

    • Activity
    • Service
    • Content Provider
    • Broadcast Receiver
    • Intent/Intent Filter
    • App Manifest File

    1.2 UI

    • Layouts
    • Widgets
    • Resources
    • Animations
    • 设备适配

    1.3 Connectivity

    • WiFi
    • Mobile网络
    • 网络状态监听

    1.4 MultiMedia

    • Audio/Video
    • Camera/Gallery

    1.5 GPS&Location&Map

    1.5.1 系统定位

    • GPS定位
    • Network定位

    3rd Map定位

    • 百度Map
    • 高德Map

    2. App进阶

    2.1 Process&Thread

    2.1.1 Process

    • Linux进程
    • App进程原理

    2.1.2 AIDL

    • 实现方式
    • 原理

    2.1.3 Handler/Looper/MQ/Thread

    2.1.4 Loader

    2.1.5 AsyncTask

    2.2 性能优化

    2.2.1 ANR

    2.2.2 布局层级性能优化

    2.3 内存优化

    2.3.1 内存检测工具

    2.3.2 内存分析工具

    2.3.3 Bitmap优化

    2.3.4 内存泄露查找及分析

    2.5 网络优化

    2.5.1 API优化

    2.5.2 低网速下优化

    2.5.3 流量使用优化

    • 判断当前网络类型
    • 使用缓存

    2.6 单元测试

    3. App高级

    3.1 相关原理熟悉

    3.1.1 Activity

    • 启动流程
    • 生命周期回调原理
    • 与View/Window的关系
    • 与Fragment的关系

    3.1.2 View/Window

    • View/Window关系
    • View渲染
    • View事件分发处理流程

    3.1.3 编译打包

    • 编译打包原理
    • 逆向工程分析
    • 热修复

    3.2 Hybrid App

    3.2.1 与Native App的异同

    3.2.2 主流框架

    • PhoneGap
    • ionic
    • React Native

    3.3 架构能力

    3.3.1 架构

    • MVC
    • MVP
    • MVVM
    • Flux
    • Clean Architecture

    3.3.2 App框架

    • 分包
    • 分层

    3.3.3 设计模式

    • OOD原则
    • 常用设计模式运用

    3.4 ART&Dalvik

    • AOT compilation
    • GC
    • Bytecode&.Dex

    3.5 自动化测试

    • monkey/monkey runner
    • UIAutomator
    • Espresso
    • Robotium

    4. 扩展学习

    4.1 响应式编程

    4.1.1 Rx

    • RxJava
    • RxAndroid
    • RxBinding

    4.1.2 Agera

    4.2 主流开源库

    4.2.1 快速开发

    • Android Annotation
    • ButterKnife

    4.2.2 Views

    • 太多

    4.2.3 HTTP模型

    • Retrofit
    • OkHttp
    • Volley

    4.2.4 图片处理

    • Glide
    • Fresco
    • Picasso
    • UIL

    4.2.5 依赖注入

    • Dagger2

    4.2.6 数据库

    • ORMLite
    • GreenDAO
    • Realm
    • Sugar

    4.2.7 辅助

    • Logger
    • LeakCanary
    • DbInspector

    本文已上传至Github AndroidDevResources 项目, 欢迎Fork, 提出意见.


        </div>
        <!--  -->
    
        <div class="show-foot">
          <a class="notebook" href="/nb/2866991">
            <i class="iconfont ic-search-notebook"></i>
            <span>Android经验谈</span>
    




    <!-- 文章底部作者信息 -->
      <div class="follow-detail">
        <div class="info">
          <a class="avatar" href="/u/bc1dacc65fae">
            <img src="//upload.jianshu.io/users/upload_avatars/851999/e2599a8c087e.png?imageMogr2/auto-orient/strip|imageView2/1/w/96/h/96" alt="96" />
    


    anly_jun

        </div>
          <div class="signature">看看书, 写写字; 捣鼓捣鼓小技术.
    

    个人博客: http://blog.lmj.wiki


      <div class="support-author"></div>
    
    <div class="meta-bottom">
      <div class="btn like-group"></div>
      <div class="share-group">
        <a class="share-circle" data-action="weixin-share" data-toggle="tooltip" data-original-title="分享到微信">
          <i class="iconfont ic-wechat"></i>
        </a>
        <a class="share-circle" data-action="weibo-share" data-toggle="tooltip" href="javascript:void((function(s,d,e,r,l,p,t,z,c){var%20f=&#39;http://v.t.sina.com.cn/share/share.php?appkey=1881139527&#39;,u=z||d.location,p=[&#39;&amp;url=&#39;,e(u),&#39;&amp;title=&#39;,e(t||d.title),&#39;&amp;source=&#39;,e(r),&#39;&amp;sourceUrl=&#39;,e(l),&#39;&amp;content=&#39;,c||&#39;gb2312&#39;,&#39;&amp;pic=&#39;,e(p||&#39;&#39;)].join(&#39;&#39;);function%20a(){if(!window.open([f,p].join(&#39;&#39;),&#39;mb&#39;,[&#39;toolbar=0,status=0,resizable=1,width=440,height=430,left=&#39;,(s.width-440)/2,&#39;,top=&#39;,(s.height-430)/2].join(&#39;&#39;)))u.href=[f,p].join(&#39;&#39;);};if(/Firefox/.test(navigator.userAgent))setTimeout(a,0);else%20a();})(screen,document,encodeURIComponent,&#39;&#39;,&#39;&#39;,&#39;http://cwb.assets.jianshu.io/notes/images/4976621/weibo/image_88b289420c2a.jpg&#39;, &#39;推荐 @anly-jun 的文章《Android App 开发技术图谱》( 分享自 @简书 )&#39;,&#39;http://www.jianshu.com/p/39c63eff3c36?utm_campaign=maleskine&amp;utm_content=note&amp;utm_medium=reader_share&amp;utm_source=weibo&#39;,&#39;页面编码gb2312|utf-8默认gb2312&#39;));" data-original-title="分享到微博">
          <i class="iconfont ic-weibo"></i>
        </a>
          <a class="share-circle" data-toggle="tooltip" href="http://cwb.assets.jianshu.io/notes/images/4976621/weibo/image_88b289420c2a.jpg" target="_blank" data-original-title="下载长微博图片">
            <i class="iconfont ic-picture"></i>
          </a>
        <a class="share-circle more-share" tabindex="0" data-toggle="popover" data-placement="top" data-html="true" data-trigger="focus" href="javascript:void(0);" data-content='
          <ul class="share-list">
            <li><a href="javascript:void(function(){var d=document,e=encodeURIComponent,r=&#39;http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url=&#39;+e(&#39;http://www.jianshu.com/p/39c63eff3c36?utm_campaign=maleskine&amp;utm_content=note&amp;utm_medium=reader_share&amp;utm_source=qzone&#39;)+&#39;&amp;title=&#39;+e(&#39;推荐 anly_jun 的文章《Android App 开发技术图谱》&#39;),x=function(){if(!window.open(r,&#39;qzone&#39;,&#39;toolbar=0,resizable=1,scrollbars=yes,status=1,width=600,height=600&#39;))location.href=r};if(/Firefox/.test(navigator.userAgent)){setTimeout(x,0)}else{x()}})();"><i class="social-icon-sprite social-icon-zone"></i><span>分享到QQ空间</span></a></li>
            <li><a href="javascript:void(function(){var d=document,e=encodeURIComponent,r=&#39;https://twitter.com/share?url=&#39;+e(&#39;http://www.jianshu.com/p/39c63eff3c36?utm_campaign=maleskine&amp;utm_content=note&amp;utm_medium=reader_share&amp;utm_source=twitter&#39;)+&#39;&amp;text=&#39;+e(&#39;推荐 anly_jun 的文章《Android App 开发技术图谱》( 分享自 @jianshucom )&#39;)+&#39;&amp;related=&#39;+e(&#39;jianshucom&#39;),x=function(){if(!window.open(r,&#39;twitter&#39;,&#39;toolbar=0,resizable=1,scrollbars=yes,status=1,width=600,height=600&#39;))location.href=r};if(/Firefox/.test(navigator.userAgent)){setTimeout(x,0)}else{x()}})();"><i class="social-icon-sprite social-icon-twitter"></i><span>分享到Twitter</span></a></li>
            <li><a href="javascript:void(function(){var d=document,e=encodeURIComponent,r=&#39;https://www.facebook.com/dialog/share?app_id=483126645039390&amp;display=popup&amp;href=http://www.jianshu.com/p/39c63eff3c36?utm_campaign=maleskine&amp;utm_content=note&amp;utm_medium=reader_share&amp;utm_source=facebook&#39;,x=function(){if(!window.open(r,&#39;facebook&#39;,&#39;toolbar=0,resizable=1,scrollbars=yes,status=1,width=450,height=330&#39;))location.href=r};if(/Firefox/.test(navigator.userAgent)){setTimeout(x,0)}else{x()}})();"><i class="social-icon-sprite social-icon-facebook"></i><span>分享到Facebook</span></a></li>
            <li><a href="javascript:void(function(){var d=document,e=encodeURIComponent,r=&#39;https://plus.google.com/share?url=&#39;+e(&#39;http://www.jianshu.com/p/39c63eff3c36?utm_campaign=maleskine&amp;utm_content=note&amp;utm_medium=reader_share&amp;utm_source=google_plus&#39;),x=function(){if(!window.open(r,&#39;google_plus&#39;,&#39;toolbar=0,resizable=1,scrollbars=yes,status=1,width=450,height=330&#39;))location.href=r};if(/Firefox/.test(navigator.userAgent)){setTimeout(x,0)}else{x()}})();"><i class="social-icon-sprite social-icon-google"></i><span>分享到Google+</span></a></li>
            <li><a href="javascript:void(function(){var d=document,e=encodeURIComponent,s1=window.getSelection,s2=d.getSelection,s3=d.selection,s=s1?s1():s2?s2():s3?s3.createRange().text:&#39;&#39;,r=&#39;http://www.douban.com/recommend/?url=&#39;+e(&#39;http://www.jianshu.com/p/39c63eff3c36?utm_campaign=maleskine&amp;utm_content=note&amp;utm_medium=reader_share&amp;utm_source=douban&#39;)+&#39;&amp;title=&#39;+e(&#39;Android App 开发技术图谱&#39;)+&#39;&amp;sel=&#39;+e(s)+&#39;&amp;v=1&#39;,x=function(){if(!window.open(r,&#39;douban&#39;,&#39;toolbar=0,resizable=1,scrollbars=yes,status=1,width=450,height=330&#39;))location.href=r+&#39;&amp;r=1&#39;};if(/Firefox/.test(navigator.userAgent)){setTimeout(x,0)}else{x()}})()"><i class="social-icon-sprite social-icon-douban"></i><span>分享到豆瓣</span></a></li>
          </ul>
        '>更多分享</a>
      </div>
    </div>
    <div id="vue_comment"></div>
    


    <script type="application/json" data-name="page-data">{"user_signed_in":false,"locale":"zh-CN","os":"windows","read_mode":"day","read_font":"font2","note_show":{"is_author":false,"is_following_author":false,"is_liked_note":false,"follow_state":0,"uuid":"2a54a476-b4fe-4d7d-adcd-132365df1e3d"},"note":{"id":4976621,"slug":"39c63eff3c36","user_id":851999,"notebook_id":2866991,"commentable":true,"likes_count":94,"views_count":7308,"public_wordage":744,"comments_count":10,"total_rewards_count":1,"is_author":false,"author":{"nickname":"anly_jun","total_wordage":68811,"followers_count":1860,"total_likes_count":2150}}}</script>
    
    <script src="//cdn2.jianshu.io/assets/babel-polyfill-676833c6a4d68573b4c3.js" crossorigin="anonymous"></script>
    <script src="//cdn2.jianshu.io/assets/web-base-3b4a327922f6c3b40878.js" crossorigin="anonymous"></script>
    
    (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();


    展开全文
  • Android App开发技术图谱

    千次阅读 2016-09-22 10:14:46
    引言: 今天偶然看到StuQ的技术图谱, 找了找竟然没有Android开发的....简书/anly_jun/Android App 开发技术图谱 图片比较大, 加载较慢, 请等待~~ 1. 操作系统 Windows/MacOSX/Linux 2. 编程语言 JavaHTM

    引言:
    今天偶然看到StuQ的技术图谱, 找了找竟然没有Android开发的. 想起之前自己弄了一个, 翻出来看看并不过时, 整理下发出, 大家共同进步.

    转载请注明出处: 简书/anly_jun/Android App 开发技术图谱

    图片比较大, 加载较慢, 请等待~~


    1. 操作系统

    Windows/MacOSX/Linux

    2. 编程语言

    • Java
    • HTML/JS (Hybrid/Web App)
    • C/C++ (NDK)
    • SQL (DB)
    • Kotlin

    3. 开发工具

    3.1 IDE

    • Android Studio
    • Eclipse

    3.2 调试工具

    3.2.1 网络调试

    • Charles
    • Wireshark
    • Fiddler
    • tcpdump
    • Paw/Postman

    3.2.2 内存分析

    • monitor
    • MAT

    3.2.3 Android tools

    • adb
    • draw9patch
    • hierarchyviewer
    • uiautomatorviewer

    3.3 版本管理

    3.3.1 Git

    • Git命令
    • Github/GitLab

    3.3.2 SVN

    3.4 CodeReview

    • Gerrit
    • Github pull request

    3.5 Bug/任务管理

    • Redmine
    • JIRA
    • Bugzilla
    • Teambition
    • Tower

    3.6 编译工具

    • Gradle

    3.7 持续集成

    • Jenkins
    • Travis CI

    3.8 应用分发

    • 蒲公英
    • fir.im

    1. App基础

    1.1 基本组件

    • Activity
    • Service
    • Content Provider
    • Broadcast Receiver
    • Intent/Intent Filter
    • App Manifest File

    1.2 UI

    • Layouts
    • Widgets
    • Resources
    • Animations
    • 设备适配

    1.3 Connectivity

    • WiFi
    • Mobile网络
    • 网络状态监听

    1.4 MultiMedia

    • Audio/Video
    • Camera/Gallery

    1.5 GPS&Location&Map

    1.5.1 系统定位

    • GPS定位
    • Network定位

    3rd Map定位

    • 百度Map
    • 高德Map

    2. App进阶

    2.1 Process&Thread

    2.1.1 Process

    • Linux进程
    • App进程原理

    2.1.2 AIDL

    • 实现方式
    • 原理

    2.1.3 Handler/Looper/MQ/Thread

    2.1.4 Loader

    2.1.5 AsyncTask

    2.2 性能优化

    2.2.1 ANR

    2.2.2 布局层级性能优化

    2.3 内存优化

    2.3.1 内存检测工具

    2.3.2 内存分析工具

    2.3.3 Bitmap优化

    2.3.4 内存泄露查找及分析

    2.5 网络优化

    2.5.1 API优化

    2.5.2 低网速下优化

    2.5.3 流量使用优化

    • 判断当前网络类型
    • 使用缓存

    2.6 单元测试

    3. App高级

    3.1 相关原理熟悉

    3.1.1 Activity

    • 启动流程
    • 生命周期回调原理
    • 与View/Window的关系
    • 与Fragment的关系

    3.1.2 View/Window

    • View/Window关系
    • View渲染
    • View事件分发处理流程

    3.1.3 编译打包

    • 编译打包原理
    • 逆向工程分析
    • 热修复

    3.2 Hybrid App

    3.2.1 与Native App的异同

    3.2.2 主流框架

    • PhoneGap
    • ionic
    • React Native

    3.3 架构能力

    3.3.1 架构

    • MVC
    • MVP
    • MVVM
    • Flux
    • Clean Architecture

    3.3.2 App框架

    • 分包
    • 分层

    3.3.3 设计模式

    • OOD原则
    • 常用设计模式运用

    3.4 ART&Dalvik

    • AOT compilation
    • GC
    • Bytecode&.Dex

    3.5 自动化测试

    • monkey/monkey runner
    • UIAutomator
    • Espresso
    • Robotium

    4. 扩展学习

    4.1 响应式编程

    4.1.1 Rx

    • RxJava
    • RxAndroid
    • RxBinding

    4.1.2 Agera

    4.2 主流开源库

    4.2.1 快速开发

    • Android Annotation
    • ButterKnife

    4.2.2 Views

    • 太多

    4.2.3 HTTP模型

    • Retrofit
    • OkHttp
    • Volley

    4.2.4 图片处理

    • Glide
    • Fresco
    • Picasso
    • UIL

    4.2.5 依赖注入

    • Dagger2

    4.2.6 数据库

    • ORMLite
    • GreenDAO
    • Realm
    • Sugar

    4.2.7 辅助

    • Logger
    • LeakCanary
    • DbInspector


    文/anly_jun(简书作者)
    原文链接:http://www.jianshu.com/p/39c63eff3c36
    著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
    展开全文
  • 简单总结了一下 Android App 开发中使用到的知识,以脑图的形式呈现。后续会慢慢补全各个分支相应的链接。

    Android App 开发技术图谱

    转载请注明出处:www.leoyanblog.com

    本文出自 LeoYan 的博客

    本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 LeoYan 即可关注。

    简单总结了一下 Android App 开发中使用到的知识,以脑图的形式呈现。后续会慢慢补全各个分支相应的链接。

    Android-App开发技能图谱

    注:如图片显示不清晰,请在图片上右键另存为到本地查看高清大图。

    一、开发工具

    1. IDE

    • Android Studio
    • Eclipse

    2. 调试工具

    Android Tools

    • adb
    • Hierarchy Viewer
    • draw9patch
    • UI Automator Viewer
    • Trace View
    • Lint

    网络调试

    • Charles
    • Wireshark
    • Fiddler
    • tcpdump
    • Paw/Postman

    内存分析

    • Android Monitor
    • MAT

    3. 版本控制

    Git

    • Git命令
    • Github/GitLab

    SVN

    4. CodeReview

    • Gerrit
    • Github pull request

    5. Bug/任务管理

    • Redmine
    • JIRA
    • Bugzilla
    • Teambition
    • Tower

    6. 编译工具

    • Gradle

    7. 持续集成

    • Jenkins
    • Travis CI

    8. 应用分发

    • 蒲公英
    • fir.im

    二、App 基础

    1. 基础知识

    • java基础
    • 数据结构
    • 面向对象思想
    • 设计模式
    • 面向对象思想

    2. Android基础

    Android SDK

    基本组件

    • Activity
    • Service
    • BroadcastReceiver
    • ContentProvider
    • Intent/Intent Filter
    • AndroidMainfest

    UI

    Layout
    • LinearLayout
    • RelativeLayout
    • FrameLayout
    • GridLayout
    • TableLayout
    • DrawerLayout
    • SlidingPaneLayout
    View
    Widget
    • TextView
    • Button
    • ImageView
    • ImageButton
    • RadioButton
    • ToggleButton
    • CheckBox
    • Switch
    • ProgressBar
    • SeekBar
    • RatingBar
    • Spinner
    • WebView
    Container
    • RadioGroup
    • ScrollView
    • ListView
    • GridView
    • ExpandableListView
    • Gallery
    • ViewPager
    • SlidingDrawer
    • TabHost
    • VideoView
    • RecyclerView
    • CardView
    Date&Time
    • DatePicker
    • TimePicker
    • CalendarView
    • TextClock
    • AnalogClock
    • Chronometer
    Expert
    • ToolBar
    • Fragment
    • Space
    • PopupWindow
    • CheckedTextView
    • AutoCompleteTextView
    • MultiAutoCompleteTextView
    • QuickContactBadge
    • ExtractEditText
    • NumberPicker
    • ZoomButton
    • ZoomControls
    • GestureOverlayView
    • SurfaceView
    • TextureView
    • StackView
    • ViewStub
    • ViewAnimator
    • ViewFlipper
    • ViewSwitcher
    • ImageSwitcher
    • TextSwitcher
    • AdapterViewFlipper
    • MediaController
    • DialerFilter
    • PopMenu
    Other
    • include
    • requestFocus
    Custom View
    • extend system View
    • combination View
    • extend View
    Animation
    View Animation
    • Tween Animation
      • Alpha
      • Scale
      • Translate
      • Rotate
      • Interpolator
    • Frame Animation
      • animation-list
    Property Animation
    • ValueAnimator
    • ObjectAnimator
    • AnimatorSet
    Resource
    assets
    • AssetManager
    res
    • anim
    • animator
    • color
    • drawable
    • interpolator
    • layout
    • menu
    • raw
    • values
      • arrarys
      • attrs
      • bools
      • colors
      • string
      • styles
    • xml
    OpenGL

    3. 数据持久化

    Sqlite

    • SQLiteOpenHelper
    • ContentProvider

    File

    • Internal Storage
    • External Storage

    SharedPreferences

    4. 通信

    Http

    • HttpClient
    • HttpConnection

    Socket

    Bluetooth

    NFC

    Headset

    USB

    5. 手机功能

    电话

    • 联系人
    • 通话记录

    短/彩信

    Camera

    Audio

    SD卡

    Wifi

    感应器

    • 加速
    • 方向
    • 重力
    • 光线
    • 陀螺仪
    • 磁场
    • 接近
    • 温度
    • 压力
    • 线性加速度
    • 旋转

    三、App 进阶

    1. Process&Thread

    Process

    • Linux进程
    • App进程原理

    AIDL

    • 实现方式
    • 原理

    Handler/Looper/MessageQueue/Thread

    Loader

    AsyncTask

    2. 性能优化

    • ANR
    • 布局层级性能优化

    3. 内存优化

    • 内存检测工具
    • 内存分析工具
    • Bitmap优化
    • 内存泄露查找及分析

    4. 网络优化

    API优化

    低网速下优化

    流量使用优化

    • 判断当前网络类型
    • 使用缓存

    5. 单元测试

    • JUnit

    四、App 高级

    1. 相关原理熟悉

    Activity

    • 启动流程
    • 生命周期回调原理
    • 与View/Window的关系
    • 与Fragment的关系

    View/Window

    • View/Window关系
    • View渲染
    • View事件分发机制

    编译打包

    • 编译打包原理
    • 逆向工程分析
    • 热修复

    2. Hybrid App

    与Native App的异同

    主流框架

    • React Native
    • Weex
    • PhoneGap
    • ionic

    3. 架构能力

    架构

    • MVC
    • MVP
    • MVVM
    • Flux
    • Clean Architecture

    App框架

    • 分包
    • 分层

    设计模式

    • OOD原则
    • 常用设计模式运用

    4. ART&Dalvik

    • AOT compilation
    • GC
    • Bytecode&Dex

    5. 自动化测试

    • Monkey/MonkeyRunner
    • UIAutomator
    • Espersso
    • Robotium
    • Appium
    • Athrun(TMTS)

    五、扩展学习

    1. 响应式编程

    Rx

    • RxJava
    • RxAndroid
    • RxBinding

    Agera

    2. 快速开发

    • ButterKnife
    • Android Annotation
    • AFinal
    • xUtils

    3. Views

    • 太多…

    4. 网络请求

    • OkHttp
    • Retrofit
    • Volley

    5. 图片请求

    • Glide
    • Fresco
    • Picasso
    • Universal-Image-Loader

    6. 依赖注入

    • Dagger2

    7. 事件总线

    • EventBus
    • Otto

    8. 数据库

    • ORMLite
    • GreenDAO
    • Realm
    • SugarORM
    • ActiveAndroid

    9. 图表

    • MPAndroidChart
    • HelloCharts

    10. 辅助

    • Logger
    • LeakCanary
    • DbInspector

    11. 支付

    • 支付宝
    • 微信
    • 银联
    • Ping++

    12. 地图

    • 百度地图
    • 高德地图
    • Google地图

    13. 分享

    • ShareSDK
    • 友盟Ushare

    14. 统计分析

    • 友盟

    15. 语音识别

    • 科大讯飞

    16. 人脸识别

    • Face++
    • ReadFace

    17. 广告


    基本信息

    作者

    • LeoYan

    日期

    • 2017/02/16

    联系我

    关注我的微信公众号,会有优质技术文章推送。

    微信扫一扫下方二维码即可关注:
    公众号

    展开全文
  • 最近在做Android APP的开发,对用到的开发技术做一个总结。 大量结构化数据的展示: 可以使用RecyclerViewadaper实现。 结构化数据可以用一个类封装起来,作为构造构造adapter的数据来源。 public class ...

    最近在做Android APP的开发,对用到的开发技术做一个总结。

    大量结构化数据的展示:

    可以使用RecyclerViewadaper实现。
    结构化数据可以用一个类封装起来,作为构造构造adapter的数据来源。

    public class RecyclerViewDepartmentAdapter  extends RecyclerView.Adapter<RecyclerViewDepartmentAdapter.ViewHolder> {
        private Context context;
        private List<Department> data;
    
        public RecyclerViewDepartmentAdapter(Context context,List<Department> data){
            this.context = context;
            this.data = data;
        }
    
        @Override
        public RecyclerViewDepartmentAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            RecyclerViewDepartmentAdapter.ViewHolder holder = new RecyclerViewDepartmentAdapter.ViewHolder(LayoutInflater.from(
                    context).inflate(R.layout.item_layout_department, parent,
                    false));
            return holder;
        }
    
        @Override
        public void onBindViewHolder(@NonNull RecyclerViewDepartmentAdapter.ViewHolder holder, final int position) {
    
            final Context context = this.context;
    
            holder.id.setText(data.get(position).getId());
            holder.department.setText(data.get(position).getDepartmentName());
    
            holder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Log.e("gwj","这里是点击每一行item的响应事件" + position + "item");
                }
            });
        }
    
        @Override
        public int getItemCount() {
            return data.size();
        }
    
        @Override
        public int getItemViewType(int position) {
            return position;
        }
    
        public static class ViewHolder extends RecyclerView.ViewHolder{
    
            private TextView id;
            private TextView department;
    
            public ViewHolder(View itemView) {
                super(itemView);
                id = itemView.findViewById(R.id.id);
                department = itemView.findViewById(R.id.department);
            }
        }
    }
    

    如上面代码所示,构造函数传入的数据是封装好的类的list。
    可以对每一行的点击进行相应。

    弹出式菜单

    PopupMenu popup = new PopupMenu(context, v);//第二个参数是绑定的那个view
    //获取菜单填充器
    MenuInflater inflater = popup.getMenuInflater();
    //填充菜单
    inflater.inflate(R.menu.menu_department, popup.getMenu());
    //绑定菜单项的点击事件
    popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
    	@Override
    	public boolean onMenuItemClick(MenuItem item) {
    		return false
    	}
    });
    
    

    菜单需要事先在xml中定义

    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android">
    
        <item android:id="@+id/add_department"
            android:title="增加条目"/>
        <item android:id="@+id/del_department"
            android:title="删除条目"/>
    </menu>
    

    简单对话框

    //弹出对话框,消息框,确认是否删除
    final AlertDialog.Builder normalDialog =
    		new AlertDialog.Builder(context);
    //normalDialog.setIcon(R.drawable.icon_dialog);
    normalDialog.setTitle("是否确定删除该部门?");
    normalDialog.setMessage("确认:删除,取消:不执行任何操作");
    normalDialog.setPositiveButton("确定",
    		new DialogInterface.OnClickListener() {
    			@Override
    			public void onClick(DialogInterface dialog, int which) {
    				Log.e("ggg","删除了一个条目!");
    			}
    		});
    normalDialog.setNegativeButton("取消",
    		new DialogInterface.OnClickListener() {
    			@Override
    			public void onClick(DialogInterface dialog, int which) {
    				Log.e("ggg","没有执行删除操作!");
    			}
    		});
    // 显示
    normalDialog.show();
    

    自定义对话框

    xml布局文件

     <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <LinearLayout
            android:layout_width="300dp"
            android:layout_height="600dp"
            android:layout_centerInParent="true"
            android:background="#44ffff"
            android:orientation="vertical">
            <!--用户名-->
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal">
    
                <TextView
                    android:id="@+id/person_name_label"
                    android:layout_width="100dp"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="5dp"
                    android:layout_marginBottom="5dp"
                    android:text="用户名:"
                    android:textColor="#000000"
                    android:textSize="20dp" />
    
                <EditText
                    android:id="@+id/person_name_edit"
                    android:layout_width="200dp"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="5dp"
                    android:layout_marginBottom="5dp"
                    android:textColor="#CD3700"
                    android:textSize="20dp" />
            </LinearLayout>
    
            <!--手机-->
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal">
    
                <TextView
                    android:id="@+id/person_phone_label"
                    android:layout_width="100dp"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="5dp"
                    android:layout_marginBottom="5dp"
                    android:text="手机号:"
                    android:textColor="#000000"
                    android:textSize="20dp" />
    
                <EditText
                    android:id="@+id/person_phone_edit"
                    android:layout_width="200dp"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="5dp"
                    android:layout_marginBottom="5dp"
                    android:textColor="#CD3700"
                    android:textSize="20dp" />
            </LinearLayout>
    
            <!--邮箱-->
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal">
    
                <TextView
                    android:id="@+id/person_email_label"
                    android:layout_width="100dp"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="5dp"
                    android:layout_marginBottom="5dp"
                    android:text="邮箱号:"
                    android:textColor="#000000"
                    android:textSize="20dp" />
    
                <EditText
                    android:id="@+id/person_email_edit"
                    android:layout_width="200dp"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="5dp"
                    android:layout_marginBottom="5dp"
                    android:textColor="#CD3700"
                    android:textSize="20dp" />
            </LinearLayout>
    
            <!--权限-->
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal">
    
                <TextView
                    android:id="@+id/person_permission_label"
                    android:layout_width="100dp"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="5dp"
                    android:layout_marginBottom="5dp"
                    android:text="权限:"
                    android:textColor="#000000"
                    android:textSize="20dp" />
    
                <Spinner
                    android:id="@+id/person_permission_spinner"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:background="@color/white"
                    android:layout_marginTop="5dp"
                    android:textAlignment="gravity"
                    />
            </LinearLayout>
    
            <!--部门-->
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal">
    
                <TextView
                    android:id="@+id/person_department_label"
                    android:layout_width="100dp"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="5dp"
                    android:layout_marginBottom="5dp"
                    android:text="部门名称:"
                    android:textColor="#000000"
                    android:textSize="20dp" />
    
                <Spinner
                    android:id="@+id/person_department_spinner"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="5dp"
                    android:background="@color/white"
                    android:textAlignment="gravity"
                    />
            </LinearLayout>
    
            <!--密码-->
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal">
    
                <TextView
                    android:id="@+id/person_password_label"
                    android:layout_width="100dp"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="5dp"
                    android:layout_marginBottom="5dp"
                    android:text="密码:"
                    android:textColor="#000000"
                    android:textSize="20dp" />
    
                <EditText
                    android:id="@+id/person_password_edit"
                    android:layout_width="200dp"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="5dp"
                    android:layout_marginBottom="5dp"
                    android:textColor="#CD3700"
                    android:textSize="20dp" />
            </LinearLayout>
    
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal">
    
                <Button
                android:id="@+id/button_confirm"
                android:layout_width="@dimen/dp_150"
                android:layout_height="wrap_content"
                android:text="确认" />
    
                <Button
                    android:id="@+id/button_cancle"
                    android:layout_width="@dimen/dp_150"
                    android:layout_height="wrap_content"
                    android:text="取消" />
    
            </LinearLayout>
    
        </LinearLayout>
    </RelativeLayout>
    

    对话框样式

    <style name="MyDialog" parent="android:Theme.Dialog">
    	<!-- 背景颜色及透明程度 -->
    	<item name="android:windowBackground">@android:color/transparent</item>
    	<!-- 是否半透明 -->
    	<item name="android:windowIsTranslucent">false</item>
    	<!-- 是否没有标题 -->
    	<item name="android:windowNoTitle">true</item>
    	<!-- 是否浮现在activity之上 -->
    	<item name="android:windowIsFloating">true</item>
    	<!-- 是否背景模糊 -->
    	<item name="android:backgroundDimEnabled">false</item>
    	<!-- 设置背景模糊的透明度-->
    	<item name="android:backgroundDimAmount">0.5</item>
    </style>
    

    类实现

    public class PersonDialog  extends Dialog{
        //在构造方法里提前加载了样式
        private Context context;//上下文
        private Button button_confirm;
        private Button button_cancle;
        private Person person;
    
        public EditText editText_name;
        public EditText editText_phone;
        public EditText editText_email;
        public EditText editText_password;
    
        public Spinner spinner_permission;
        public Spinner spinner_department;
    
        public PersonDialog(Context context, Person person){
            super(context, R.style.MyDialog);//加载dialog的样式
            this.context = context;
            this.person = person;
        }
    
        public interface OnDialogButtonClickListener {
            void okButtonClick();
            void cancelButtonClick();
        }
    
        OnDialogButtonClickListener buttonClickListner;
    
        public void setOnButtonClickListener(OnDialogButtonClickListener listener) {
            this.buttonClickListner = listener;
        }
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            //提前设置Dialog的一些样式
            Window dialogWindow = getWindow();
            dialogWindow.setGravity(Gravity.CENTER);//设置dialog显示居中
            //dialogWindow.setWindowAnimations();设置动画效果
            setContentView(R.layout.dialog_person);
    
    
            WindowManager windowManager = ((Activity)context).getWindowManager();
            Display display = windowManager.getDefaultDisplay();
            WindowManager.LayoutParams lp = getWindow().getAttributes();
            lp.width = display.getWidth()*4/5;// 设置dialog宽度为屏幕的4/5
            getWindow().setAttributes(lp);
            setCanceledOnTouchOutside(true);//点击外部Dialog消失
            //遍历控件id添加点击注册
    
            button_confirm = findViewById(R.id.button_confirm);
            button_cancle = findViewById(R.id.button_cancle);
            button_confirm.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    buttonClickListner.okButtonClick();
                }
            });
            button_cancle.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    buttonClickListner.cancelButtonClick();
                }
            });
    
            //显示控件
            editText_name = findViewById(R.id.person_name_edit);
            editText_phone = findViewById(R.id.person_phone_edit);
            editText_email = findViewById(R.id.person_email_edit);
            editText_password = findViewById(R.id.person_password_edit);
    
            spinner_department = findViewById(R.id.person_department_spinner);
            spinner_permission = findViewById(R.id.person_permission_spinner);
    
        }
    }
    

    类使用

    final PersonDialog personDialog1 = new PersonDialog(context,person1);
    personDialog1.setOnButtonClickListener(new PersonDialog.OnDialogButtonClickListener() {
    	@Override
    	public void okButtonClick() {
    		personDialog1.dismiss();
    	}
    
    	@Override
    	public void cancelButtonClick() {
    		personDialog1.dismiss();
    	}
    });
    personDialog1.show();
    

    这里使用Listener,在类的外部实现按钮的相应代码。

    下拉列表

    spinner_department = findViewById(R.id.person_department_spinner);
    final DepartmentDao departmentDao = new DepartmentDao(context);
    List<Department> ld = departmentDao.getDepartments();
    
    List<String> list1 = new ArrayList<>();
    for(int i = 0;i<ld.size();i++) {
    	list1.add(ld.get(i).getDepartmentName());
    }
    
    
    ArrayAdapter<String> adapter_department = new ArrayAdapter<String>(context,R.layout.item_gwj_register_org, R.id.text,list1);
    spinner_department.setAdapter(adapter_department);
    

    把从数据库中查询到内容显示到下拉列表中

    展开全文
  • 如果不想用Android默认的标题栏,可以自定义标题栏,这样可以在标题栏上添加一些控件,比如左上角添加返回控件(这个Android默认通过配置也有),添加标题内容,右上角添加一个下拉菜单等。 要想自定义标题栏,需要...
  • Android sqlite数据库的查询 sqlite数据库底层封装 public class MyOpenHelper extends SQLiteOpenHelper{ private static final String name = "mydb.db"; //数据库名称 private static final Integer version ...
  • android APP开发技能图

    2017-08-29 16:13:34
    android app开发技能图,介绍了开发android APP需要掌握的技术
  • Android APP开发入门

    2019-03-01 11:24:12
    本书从初学者的角度出发,通过通俗易懂的语言、丰富多彩的实例,详细介绍了使用AndroidStudio开发环境开发Android应用程序应该掌握的各方面技术。全书共分16章,
  • Android APP开发入门 使用Android Studio环境,高清版,本书从初学者的角度出发,通过通俗易懂的语言、丰富多彩的实例,详细介绍了使用AndroidStudio开发环境开发Android应用程序应该掌握的各方面技术
  • 全书共分16章,内容包括使用AndroidStudio开发AndroidApp、Android程序设计基础讲座、应用程序界面设计、事件处理、用户界面的基本组件、高级UI组件、即时信息对话框、用Intent启动程序中的其他Activity、用Intent...
  • 谈谈AndroidApp混合开发

    2021-02-26 00:42:19
    下面来谈谈HybridApp开发中的技术问题。iOS方面的我不太了解,我就主要谈谈Android开发中的,其中可能会有很多说错的,请大家轻喷想要在一个App中显示一个Html5网页的功能,其实很简单,只要一个WebView就可以了。你...
  • 最近试着写一个ANDROIDAPP,比较短的时间内把客户端的内容过了一遍,现在 需要跟后台进行数据交互,数据库部分已经搞定。以前没有写过WEBSERVICE,想大 致了解一下需要用到什么技术,和简单的技术流程。 功能很...
  • 随着移动互联网的持续发展,Android系统从智能手机逐步拓展到平板电脑、智能电视、车载大屏、智能家居、智能手表等诸多设备,...在5G时代,Android App开发需要发挥5G优势给用户带来新体验、增添新功能、用得更省
  • 这个App还是大二做的,前两天有人问我能不能做原生App,公司也要用到Android混合开发,突然想到了这个App,当时也是赶共享经济的潮流,在学校里和同学搞了这么个App,下面就简单介绍下吧,App里面的技术栈是很古老...
  • android app开发计划

    千次阅读 2016-03-01 13:39:00
     本人做android两年多,虽然算不上技术大牛,但是自认为也小有所成。平时没什么爱好,喜欢折腾IDE,总觉得工欲善其事,必先利其器。然后喜欢追求新鲜的事物,比如新的技术和流行的框架,还有是一个完美主义者,外观...
  • Android App设计开发 PPT

    2018-02-21 16:24:45
    Android开发 2017最新ppt课件,基于Android Studio开发环境,覆盖所有Android知识点包括数据存储、网络通信、进程与消息处理、Android技术、综合案例
  • 一个Android APP程序,如果使用默认的应用图标,无论程序本身多么高大上,用户看起来,会觉得LOW。 如果修改APP程序的图标呢? 开发环境: Win10 64位+Android Studio 3.5.3 (1)首先找一个图片,如png格式...
  • 本书结合工作中的实际项目,站在开发者的角度,从实战出发,介绍如何开发一个完整Android App,...目的是让Android开发人员迅速掌握App开发技能,系统完整地了解最新Android开发技术,以及灵活运用各种开发工具和技能。
  • 这里讲述的是开发过程中最基本的,也是做常见的问题。如何开发?怎么开发?适合想要了解安卓客户端和服务器的同学学习。
  • Android App混合开发

    2017-02-07 23:09:14
    混合开发的App(Hybrid App)就是在一个App中内嵌一个轻量级的浏览器,一部分原生的功能改为...下面来谈谈Hybrid App开发中的技术问题。iOS方面的我不太了解,我就主要谈谈Android开发中的,其中可能会有很多说错的
  • AndroidQuick项目旨在提供一套进行Android APP快速开发的代码库。 AndroidQuick包含了开发一个APP所涉及到的常用的架构、模块、功能、技术点、解决方案等,每个部分附以详细的说明和demo实例。
  • public void delete(Integer id) { SQLiteDatabase db = dbOpenHelper.getWritableDatabase(); db.execSQL("DELETE FROM person WHERE personid = ?", new String[]{id}); }

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,999
精华内容 1,999
关键字:

androidapp开发技术