android程序员何去何从,android开发工程师作为一个码农以后有什么路可走

1,android开发工程师作为一个码农以后有什么路可走对技术方面一直有浓厚的兴趣话,可以一直走下去,成为技术大牛 , 不然的话可以走管理 , 但也要一定的技术,短期内我还是建议把技术提升到一定层次 。。
2 , 程序员未来前景如何大龄程序员出路在哪里年龄大的普通程序员 , 将来的出路无非就是以下三个:1、稳定地待在一家公司,有一定产出效率,成为一颗螺丝钉,不出彩也不出丑,就像之前棉纺厂的工人那样,直到这家公司不行了,找另一家,继续做个普通一兵 。其实这事儿和几十年前的工人一样,只是时代不一样,职业的名字变了 。2、寻找相对优势,到稀缺你技术、能力、经验的地方,找到存在感 。比如一线城市回退到二线、三线;比如互联网顶级公司的普通程序员进入小公司;比如互联网行业的普通程序员进入传统行业有软件部门的公司 。3、转行 , 想干什么干什么去 , 很多人认为,一个 35 岁以上的程序员相比较一个 20来岁的毕业生,精神状况、身体状况必定是不如刚刚大学毕业的年轻人,所以要尽早转行 。那么问题来了 , 程序员是吃青春饭的吗?程序员的职业发展到底如何呢?首先,我觉得时至今日,相比其他职业,程序员仍然是一个投入产出比比较高的职业 。程序员不是一个“吃青春饭”的职业,而是一个常青的职业 。程序员其实也并没有我们想象中那么累 , 很多互联网公司的工作环境、工作氛围、员工福利都是非常不错的:弹性工作,定期团建,免费健身;一日三餐、零食饮料应有尽有 。对于头脑灵活、思维敏捷,但还没有明确职业目标的理工科毕业生而言 , 把程序员作为职业生涯的起点,应该会是一个不错的选择 。以北京为例,应届毕业起薪在 8000-10000 元,比其他职业高出不少 。程序员现在小蜜蜂云工作了解很多远程可办公的,全职兼职都是有的,可供的选择还是比较多的 。程序员在职业生涯第一个阶段 , 通常是 3-5 年 。这个阶段要以职业探索为主,脚踏实地写好每一行代码 。只有快速学习和成长,掌握过硬的专业技能,这样才能在职场立足 , 走好未来的路 。现在程序员的职业领域已经细分到了令人发指的地步,比如:大数据工程师、云计算工程师、某某语言工程师、系统架构师、web 前端工程师、嵌入式软件工程师、数据库开发工程师等等 。
3,android程序员的前景如何如果你有扎实的Java基础 , 学习能力不错,入手android的话很容易 。现在安卓近几年市场需求量很大,前景还可以 。相对于Java开发  , android开发待遇丰厚一些的 。客观的现实是那样,你可以通过自身的努力,一定会有不错的收获的 。希望能帮到你 。。。接分 嘻嘻...目前还可以 算法才是王道要真正把android学好,需要花很大的功夫 。谷歌已经说了 , 目前android其实只走了三分之一的路 。所以说,如果学的好,前景根本不用担心,学的不好 , 打打酱油就是了 。【android程序员何去何从,android开发工程师作为一个码农以后有什么路可走】
4,Android程序员的较好的职业规划应该是怎样下面的回答建立在JAVA基础和Android基础都过关的情况下 。一、JAVA SE1、JAVA标准容器可能受一些网上流传的各种demo的影响,大多数Android开发者最拿手的就是ListView(RecycleView)+BaseAdapter+ArrayList三剑客 , 但是要知道ArrayList还有两个亲戚,一个是近亲CopyOnWriteArrayList,另外是远房LinkedList、CurrentHashMap 。CopyOnWriteArrayList的效率比ArrayList略有下降 , 空间利用率也下降了很多,但是CopyOnWriteArrayList是线程安全的,CopyOnWriteArrayList和ArrayList对尾的操作都为O(1) , 但是其他位置的删除,插入操作很增加很大的时间复杂度,涉及到一次内存搬移过程,不过random access效率很高;LinkedList的随即插入和删除性能很高 。tips:数组复制,请使用System.arrayCopy或Arrays.copyOf 实现,且在JAVA中后者基于前者实现 。2、JAVA并发1、ThreadPoolExecutor,JAVA并发的核心线程池框架,不过它的构造函数非常复杂:public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue)this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,Executors.defaultThreadFactory(), defaultHandler);}所以有一个方便我们使用的工厂类,Executors,可以创建4种类型的ThreadPool:固定线程数量的线程池:Executors.newFixedThreadPool(int size);单线程异步队列:Executors.newSingleThreadExecutor();周期性调度:Executors.newSingleThreadScheduledExecutor();多线程周期性调度:Executors.newScheduledThreadPool(1);说到ThreadPoolExecutor的构造函数,它的最后一个参数BlockingQueue<Runnable>来自于包java.util.concurrent,ArrayBlockingQueue、LinkedBlockingQueue、SynchronousQueue、PriorityBlockingQueue和这个包里面其他的类也要过一遍 。workQueue一定要用有界队列!设想一个极端情景,假设每个TaskWork都运行10s(更确切的说,IO等待10s),而ThreadPool在10s内接收到了1000个这样的TaskWork,如果我们使用了无界队列 , 队列的大小必然会急速增长直至进程Crash,但是如果我们使用了有界队列,假设队列长度为128,当TaskWork超过128,我们会有另外的线程帮忙处理 , 那系统的负载就可能降下来了 。上面说到了任务池的创建,那里面的任务是什么?从哪儿来呢?里面的任务是FutureTask<T>,构造函数的参数是一个Callable对象,而我们真正的任务就在Callable对象里面的call方法,FuterTask执行实际任务后会在主线程调用done函数 , 最后通过ExecutorService的submit方法将FutureTask提交到任务池 。发一段伪代码:public class SomeCallable implements Callable<String>public SomeCallable()}@Overridepublic String call() throws Exception// some heavy work consting amounts of timereturn "result";}}FutureTask<String> futureTask = new FutureTask<String>(new SomeCallable())@Overrideprotected void done()String result = get();//dosth to result}};ExecutorService executor = Executors.newFixedThreadPool(1);executor.submit(futureTask);2、一个线程sleep的小坑,我相信很多朋友都写过这样的代码:public void run() tryThread.sleep(1000);} catch (InterruptedException ie)ie.printStackTrace();}}但是设想一下,如果我们的线程在执行sleep之前就被interrupt了呢 , 别以为不可能,ThreadPoolExecutor框架就是通过对所有的Thread进行interrupt来取消所有线程 , 这是我们上述代码就会抛出异常 。所以良好的实践应该是:public void run()while (!Thread.currentThread().isInterrupted())tryThread.sleep(1000);} catch (InterruptedException ie)ie.printStackTrace();}}} 3、会用wait/notify来实现最简单的生产者-消费者模式 。生产者/消费者问题的多种Java实现方式4、ThreadLocal变量的理解/定义 。ThreadLocal在Android中的应用,最典型的应用就是在android的messengeQueue-Looper模型中,Handler如何找到当前线程的Looper呢?我们平常直接在UI线程中new Handler()就可以了 , 里面就是mainLooper,但是Android怎么确定的UIx线程中new Handler()里面是mainLooper呢,答案就是通过将Looper作为ThreadLocal变量 。以及ThreadLocal基本的实现原理(在线程对象里面有一个inner static class) 。5、JAVA的heap/stack的理解,可能会和多线程一起考察,blogspot.com 的页面6、ConcurrentHashMap的实现,blogspot.com 的页面7、 JAVA的Reflection,Android内部很多东西都是基于Reflection实现,比如我们经常用的属性动画,就是通过属性名称找到属性的getter方法名,进而通过反射调用 。不过对于日常开发的话,Reflection有两个作用,一是在一些情形下(特别是对属性的操作,包括更改、比较,比如我们可以定义一个通用的Collections.sort)可以提高代码复用度,二是可以做一些比较hack的事情,比如使用一些internal class,内部的AIDL等,修改一些internal类的static value 。二、Android1、预防内存泄漏!擅用WeakReference<T>!所有从类外部传来的对象(特别对于Context,View,Fragmet,Activity对象),如果要将其放进类内部的容器对象或者静态类中引用,请一直用WeakReference包装!比如在TabLayout的源码中,在TabLayoutOnPageChangeListener中,就为TabLayout做了WeakReference wrap 。2、Android IPC,Binder的理解 , 理解Binder的引用和实体,知道所谓的客户端和服务端分别代表什么意思 , 懂得ServiceManger对每个Service注册和根据服务名来getService的基本原理,这些没多少坑,但是非常庞杂,建议阅读《深入理解Android vol1》Chapter 6,深入理解Android (豆瓣) 。会写AIDL,会用Messenger夸进程传递信息 , 具体的实践:Android实战技术:IPC方式简介教程 。3、Activity的简要绘制(创建)过程  , Activity本质是为了Window(PhoneWindow)服务,onAttach:建立mwindow对象->setContentView:创建DecorView,在DecorView中根据Activity的风格来 创建Title(ActionBar),TitleContent(ActionBar下面的内容,内部资源id为android:id="@android:id/content")->mWindow.addView(mDecorView),将创建好的DecorView添加进window,addview时创建一个RootView,也就是我们的R.layout.activity_main的母布局 , 然后对子控件递归遍历发送绘图消息,子控件收到消息后 执行onMeasure->onLayout->onDraw , 这时,我们就可以得到各控件的尺寸信息 。4、 在onCreate中获得视图的尺寸信息 , 注意到我们上面说,母控件通过遍历向子控件发送dispatchView信息来使子控件绘图,当然,我们也可以在(setContentView)这之后在子控件上post一个Runnable到控件的runnable队列中去,在其中自然可以获得正确的尺寸 。5、关于View的点点滴滴 。基?。鹤远ㄒ宓ヒ籚iew,换句话说,叫自定义UI,就是仅仅在OnDraw里面做了文章,比如仪表盘,圆形头像,自定义属性->中级:自定义View与其他系统Wdiget协同工作,比如继承LinearLayout写一个自定义的TabLayout来与ViewPager协同工作,处理事件(滑动、点击、屏幕手势)分发,处理滑动事件冲突,这个阶段才可以被称之为自定义Widget->进阶:突破Activity,直接向Window添加、删除、更新View,理解WindowManager仅仅是个引用,真正的工作在WindowManagerService里面完成 。6、图片加载框架 , 熟悉并实践过基本的缓存算法LruCache、DiskLruCache,对Bitmap重采样以降低OOM的几率,熟读一款中规中矩的图片加载框架如Universal Image Loader的源码,并能将各种策略总结 。7、SurfaceView的实践,SurfaceView最常见的一个使用情境是在我们的界面之上绘制各种动画,但是有一个问题 , 在布局发生改变时,SurfaceView会出现部分屏幕变黑的情况,包括但不限于在ViewPager、DrawerActivity中使用SurfaceView,需要知道这个问题的解决方案 。7、熟练使用ContentProvider,并懂得大概原理8、Activity的几种FLAG和LauchMode分别代表的意义,以及使用场景 。9、知道65535 dex-merge问题是怎么回事10、熟悉使用Android开发者选项功能 , 比如最常用的 布局边界显示、过度绘制检测、UI绘制速度检测、Surface更新时闪烁、严格模式、CPU利用率展示、不保持Activity 。三、拓展(上面这些都真正透了,就没有大的漏洞了)1、事件流编程,EventBus、RxJava 。2、Kotlin语言 。3、DataBinding,Google的这个MVVM框架实现的很完全,很强大,包括像Angular中自定义directive/filter的类似feature 。4、知道Volley,okHttp他们的应用场景 。5、熟悉一些ORM,包括现在新出的非基于SqlLite的数据库:Realm,Realm is a mobile database: a replacement for SQLite & Core Data6、Android对Vector Icon的支持7、Android L新特性,Palette、CoordinatorLayout自定义Behavior等5,讨论一下Android程序员前景怎么样市场需求还是挺大的,人少的话工资当然会高一些,而且安卓的程序员也是未来的主流?。衷谟冒沧渴只哪敲炊? ,好多公司都要做安卓软件的 。西安卓新思创现在专门培养这部分人和好多大公司都有合作 , 定向培养的 。安卓开发的前景是非常好的 。安卓行业近年发展较好,以目前安卓开发就业行情来说,安卓开发行业在就业率和就业薪资上是超越其他行业的,可以浏览相关招聘平台看看 。企业对于安卓开发工程师也是非常需要的,相应的给出的薪资待遇都是在万元左右,根据个人能力的提升后期会更高,因此在未来的5~15年间安卓开发的前景依然比较乐观 。安卓开发学者只要学好这门技术了,技能与实战的同步进行使其拥有一定的项目开发经验,在求职过程中具备更大的竞争优势,在前景比较好的行业中找工作 , 高薪自然会很容易 。6,大探讨Android技术人员的职业路线该何去何从楼主的问题可以理解成两个意思:A:在Android这个圈子里的技术路线 就像二楼说的B:Android程序员的发展 : 我觉得这个问题就是所程序员的问题——一个很古老的话题——程序员的职业规划有见地?。值芊苫笳侥?有点迷茫1.单纯搞上层应用感觉有点前途暗淡 , 门槛低竞争大,至少熟悉一套服务器架构,走Client+Server2.物联网应该是个趋势以后智能终端会不断出现,走中底层路线 , 搞移植、裁剪,定制系统之类3.游戏尤其是大屏幕游戏,目前在国内智能电视上体验好的游戏几乎没有4.积极发展副业 , 做到不干程序员还能养家糊口1 应用层 混吃等死2 底层 进阶发展3 游戏 it的高富帅4 创业 屌丝逆袭

    推荐阅读