After 5 years of Android development, the hardest days of my life are the days of mixed eating and death!

origin

I recently saw such a post in the forum:

Coordinates Shenzhen.
The company was dissolved in early April. (Think about it now as if it was a fake dissolution and a real layoff) In the
past one and a half months, I have been pushing from friends, to direct hiring by Lagou and Boss, and then to hunting and recruiting.
From the precise delivery at the beginning to the later Haitou, hundreds of companies have been delivered together.
I met with about 10 companies, got 2 offers, and rejected them all.
One is a 10-person start-up company with no resources at all. To talk about salary, you have to apply to investors. .
The other is the transition from traditional industries to the Internet, and the salary is in place, but the corporate culture can't stand it. I go to work at 8:30 in the morning, have to do radio gymnastics, and have a two-and-a-half-half check for hepatitis B. There is no five insurances and one housing fund during the probation period. After struggling for 2 days, I still refused.
I feel that my personal abilities are pretty good. I graduated from my second major and worked for 5 years. I can get 18k in the operation post.
It's really hard to find a job for Android development this year.

Situation Analysis

When the vent has passed, any pigs that should fall will fall. In the past, the boss gave you high salary only because of the talent gap, which was determined by the relationship between supply and demand.

But as there are more and more people working on Android, what is your core competitiveness at that time?

Or one day Android is completely cold? As a newcomer who has been working for less than a year, it is not the stage of harvesting. What you need is to pave the way for your future development through the accumulation of technology, vision, and contacts.

The landlord is obviously caught in a technical bottleneck, so that it is a problem to go out to find a job that is satisfactory in all aspects. My leader now answers the phone almost every day and asks him to go out as a partner. You have not many choices now, of course, because your abilities are not strong enough. As a personal career plan, you will have to take at least 3 to 5 years. It will not make it difficult for you to find a suitable job.

During this period of time, I have been helping the department to recruit people, and I have also hung up on JDs for the direct hiring of the hook and the boss. It is estimated that hundreds of resumes have been received in more than a month. I have initiated no more than 5 interviews. I handed it up with one scalp and it was brushed. In contrast, the overall level of my friends who were looking for me on Zhihu was higher.

But here is the problem. Now the big companies I know are hiring for Android development, and many departments are still very anxious, but they just can’t hire the right people. Don't tell me that there are a lot of people doing Android now, quality is the key, quantity is meaningless. There are so many people in the pool every year. A good resume is not only among companies, but also between departments and even within departments. However, apart from this group of people, the resumes of most people can take up your time. It will take more than 5 seconds.

I mentioned this problem before. At this stage, the technological gap between companies is very obvious. Developers are in it, and because of their own learning ability, environment, project, etc., the technological gap is getting wider. The bigger it is, the two-level division after a few years of work is caused, and this gap can't be made up by one's own efforts. Some time ago, I interviewed a classmate who worked as an App in a certain line of mobile phone manufacturers. He was born in 985 and worked for 3 years. He is currently the core backbone of the company. He told me that he has done a lot of UI optimization and refactoring work. Their App team is about 4 or 5 people. It can be seen that he has worked hard to do the best within his ability. Unfortunately, limited by the size of the team, support and technical reserves, his ceiling came too fast. It’s not deep enough, and its technical capabilities are not comprehensive enough.

In this situation, what can we do as developers? The most basic is to get out of your comfort zone and keep honing your skills. Take my own example. When I first joined the company, I mainly did UI. I usually do some optimizations on the page, and solve some small bugs and ANRs. I did a good job; because I did a good job before, and because of the change in direction, After more than half a year, I switched to video downloading, and then I started to do video playback again. In more than a year and a half, I overturned the space player and downloader with my instructor and redoed it. Up to now, the indicators are very good. It was painful at the beginning of the switch. There are certain thresholds for entry into the audio and video field. The project pressure is very high, and I have never contacted it before. During that time, I don’t know how many times in the middle of the night and on holidays in the southern district of the 15th floor. Only two of my mentors and I were working overtime in the company. But thinking about it now, it is indeed the fastest growing time. I'm almost done in this area, and I started coding and decoding again this year, and continue to dig deeper in the audio and video area. So that's it. If the technology doesn't work, dig deep into it. If you feel that the environment is fettered, you will switch jobs as soon as possible to maintain your sufficient competitiveness. Maybe there is no way to change anything with a job hopping, but this is a process of quantitative change and qualitative change. An ever-increasing resume can also knock on the doors of many companies for you.

I have worked in frontline Internet companies for nearly ten years and have coached many peers. Help many people to learn and grow.

I realize that there is a lot of experience and knowledge worth sharing with you, and we can also use our abilities and experience to answer many of your confusions in IT learning, so I still insist on organizing and sharing all kinds of things when I am busy at work. However, due to limited knowledge dissemination channels, many programmer friends cannot obtain the correct information for learning and improvement. Therefore, important learning routes such as Android performance optimization, audio and video development, NDK technology, componentized plug-in hot fix, and common source code analysis will be used. Share it.

I hope I can use my power to help more confused and confused friends, and help everyone learn and develop on the road of Android development~

Application layer development

Android native development, the main things that need to be focused on are still various performance optimizations, startup speed, power consumption, fluency, network optimization, and actual combat in large factories. These are the basic qualities of an excellent Android development.

  • Start speed
  • Fluency
  • The practice of Douyin's APK package size resource optimization
  • Full analysis of Youku's responsive layout technology
  • Network Optimization
  • Revealing the Secret of the Performance Optimization Project on Taobao Double Eleven
  • Analysis of source code dependence of AutoNavi APP full link
  • Sharing of actual combat experience of completely eliminating OOM
  • WeChat Android terminal memory optimization practice

The above resources are all free to share with everyone, and the content is placed in the open source project: [Github] , everyone can get it by themselves.

Audio and video development

Fortunately, we are living in a good era, and technology has developed rapidly in the past few decades. At the time when the epidemic is raging, we can work remotely through audio and video conferences; we also have an online education system. For most students, online learning can be done at home.

From a certain perspective, although the epidemic has caused many industries to be on the brink of collapse, it has also spawned new industry developments. Among them, audio and video conferences and online education are industries that have emerged due to the epidemic. When the epidemic is difficult to end in a short period of time, the importance of audio and video conferences and online education is immediately reflected. New communication and education methods are recognized and accepted by more and more people.

We can even determine that the online education industry and the audio and video conference industry will rise this year and will develop rapidly in the next ten years.

How to learn audio and video development

1. Elementary introduction:

Draw a picture

1. ImageView draws pictures

2. SurfaceView draws pictures

3. Customize View to draw pictures

Second, AudioRecord API detailed explanation

Three, use AudioRecord to achieve recording and generate wav

  • Create an AudioRecord object
  • Initialize a buffer
  • start recording
  • Create a data stream. While reading the sound data from AudioRecord to the initialized buffer, import the data in the buffer into the data stream.
  • Close data stream
  • Stop recording

Fourth, use AudioTrack to play PCM audio

1. Basic use of AudioTrack

  • MODE_STATIC mode
  • MODE_STREAM mode

2.AudioTrack detailed

  • Type of audio stream
  • The concept of Buffer allocation and Frame
  • AudioTrack construction process

3. Comparison of AudioTrack and MediaPlayer

  • the difference
  • contact
  • SoundPool

5. Use Camera API to collect video data

1. Preview Camera data

2. Get the data callback of NV21

6. Use MediaExtractor and MediaMuxer API to parse and encapsulate mp4 files

1. Introduction to MediaExtractor API

2. Introduction to MediaMuxer API

3. Use context

7. Detailed MediaCodec API

1. Introduction to MediaCodec

2.MediaCodec API description

3.MediaCodec flow control

  • Basic concepts of flow control
  • Android hard-coded flow control
  • Android flow control strategy selection

Due to the limited length of the article, the remaining content is too much, and the illustrations in the article are limited, the following can only be shown in the screenshot directory:

2. Intermediate advanced articles:
  • Android OpenGL ES Development (1): Introduction to OpenGL ES
  • Android OpenGL ES development (two): OpenGL ES environment construction
  • Android OpenGL ES Development (3): OpenGL ES defines the shape
  • Android OpenGL ES Development (4): OpenGL ES drawing shapes
  • Android OpenGL ES development (5): OpenGL ES uses projection and camera view
  • Android OpenGL ES Development (6): OpenGL ES adds motion effects
  • Android OpenGL ES development (7): OpenGL ES responds to touch events
  • Android OpenGL ES development (8): OpenGL ES shader language GLSL
  • Android OpenGL ES development (9): OpenGL ES texture mapping
  • Android OpenGL ES development (ten): interact with shaders through GLES20
  • Use OpenGL to display a picture
  • GLSurfaceviw draws Camera preview screen and realizes taking pictures
  • Use OpenGL ES to complete the video recording and realize the video watermark effect

Advanced research articles:
  • In-depth study of audio and video coding, such as H.264, AAC, study the use of open source codec libraries, such as x.264, JM, etc.
  • In-depth study of audio and video-related network protocols, such as rtmp, hls, and packet formats, such as flv, mp4
  • In-depth study of some open source projects in the audio and video field, such as webrtc, ffmpeg, ijkplayer, librtmp, etc.
  • Port the ffmpeg library to the Android platform, and combine the accumulated experience above to write a simple audio and video player
  • Port the x264 library to the Android platform and combine the experience accumulated above to complete the H264 soft editing function of video data
  • Port the librtmp library to the Android platform and combine the experience accumulated above to complete the Android RTMP streaming function

Audio and video codec technology

  • Audio and video codec technology (1): MPEG-4/H.264 AVC codec standard
  • Audio and video coding and decoding technology (two): AAC audio coding technology

Streaming protocol

  • Streaming media protocol (1): HLS protocol
  • Streaming media protocol (two): RTMP protocol

Multimedia file format

  • Multimedia file format (1): MP4 format
  • Multimedia file format (two): FLV format
  • Multimedia file format (3): M3U8 format
  • Multimedia file format (4): TS format
  • Multimedia file format (5): PCM / WAV format The
    above resources are free to share with you, and the content is placed in the open source project: [Github] , you can get it by yourself .

Plug-in, componentization, and hot repair development

As an important branch of Android client technology, componentization has been the direction of active exploration and practice in the industry in recent years. The various Android development teams in each major factory are also trying and practicing different componentized solutions, and there are many high-quality outputs in the componentized communication framework.

How to achieve componentization

The issues that need to be considered in order to achieve componentization mainly include the following:

  • Code decoupling. Disassembling and decoupling a huge project is a very time-consuming and labor-intensive work, but it is also the most basic and important step
  • Data transfer. Each component may be provided to other components to use, the main project and the component, the data transfer between the component and the component
    UI jump.
  • The life cycle of the component. The life cycle of component loading, unloading and dimensionality reduction
  • Integrated debugging. How to compile components on demand during the development phase? There may be only one or two components involved in the integration during a debugging, so the compilation time will be greatly reduced and development efficiency will be improved.
  • Code isolation. How to prevent the occurrence of coupling.

The following is the most comprehensive advanced Android component enhancement practical manual on the entire network, covering the entire Internet company. Due to space limitations, not all content will be displayed. Only screenshots can be displayed. The complete content has been organized into a PDF document.

Nowadays, the use of plug-in technology is very common, such as WeChat, QQ, Taobao, Tmall, Space, Ctrip, Dianping, Mobile Manager, etc. These applications that everyone is not familiar with are all in use.

Plug-in technology can bring huge benefits to project development, such as: parallel and efficient development, module decoupling, lifting the limit of a single dex function that cannot exceed 65535, dynamic update and upgrade, on-demand loading, and so on.

To master the plug-in technology, you need the following Android basics and related knowledge, for example:

  • Android application installation, loading process

  • Android application operating mechanism, life cycle calling principle

  • Principles of Android application resource compilation and packaging

  • Android application read resource principle

  • The operating principle of Android system AMS, PMS, NMS and other system services

  • Incremental update

  • HOOK and other technologies

The following will summarize the importance of comprehensive and complete Android plug-in technology and plug-inization to Android development from the basic plug-inization principle to the preliminary exploration of Android plug-inization to the actual application of Dachang architecture evolution. Due to space limitations, not all content will be displayed, only screenshots can be shown to show part, and the complete content has been organized into a PDF document.

The above resources are all free to share with everyone, and the content is placed in the open source project: [Github] , everyone can get it by themselves.

Mini Programs are products derived from WeChat’s billion-level traffic portal, and KuaiApp and KuaiApp are a new application ecosystem jointly launched by nine major mobile phone manufacturers based on the hardware platform. Users do not need to download and install, click to use, enjoy the performance experience of the native application, but personally feel that he is already cool, the small program is quite promising, Tencent is a big mountain, WeChat is a pavilion, it is difficult for you to feel cool or not. , But it depends on whether you just need it. For example, if your company has a need, then you can learn.

Recommended new technologies for learning, Flutter and Kotlin, both of which are recommended by Google.

Flutter

Flutter is a new mobile UI framework released by Google at the 2018 World Mobile Conference on February 27, 2018 to help developers develop high-quality native applications on both ios and Android platforms.

Since it was released by Google, it is worthy of recognition in terms of prospects.

Kotlin

Kotlin is the official development language recommended by Google. It is interoperable with Java, interchangeable, concise and safe, etc. It is a statically typed programming language that runs on the Java virtual machine. It is called the Swift of the Android world. It is designed and developed by JetBrains. Open source,

Kotlin can be compiled into Java bytecode or JavaScript, which is convenient to run on devices without JVM.

At last

If your level is close to reaching the advanced level, and you are confident that you can reach the advanced level quickly, then follow the advanced level of skill points and the market’s advanced requirements for flexible employment, and reach this level step by step. If your level is still elementary entry level, or your interest is not very high, and you want to switch early, you can change quickly, because it is too important to work in the right direction. It is also recommended not to span too much. Here I recommend going to the big front or The direction of the product changes, of course, if you have an interest in this area.

Of course, the above are all about flexible employment requirements in the technical direction. Of course, you can also develop in the direction of technical management and products after you have accumulated a certain level of technology stack and technology. Of course, you can also choose to start a business if you are good enough. The idea and psychological preparation.

Of course, most people stay at the intermediate or advanced level and then remain stagnant. In addition, various external environments have caused various anxiety, so it is very contradictory. At this time, your best state is to develop quickly to the advanced level. Of course, here is The more difficult, this hurdle is also more difficult to pass. Because the Android knowledge system is relatively large and complex, it involves all aspects of computer knowledge.

This article has been included in the open source project: https://github.com/Android-Alvin/Android-LearningNotes , which contains self-learning programming routes in different directions, interview question collection/face sutras, and a series of technical articles, etc. The resources are continuously being updated …

People who see good articles on CSDN and like them are more open-minded than ordinary people!

Your support! My motivation!

Guess you like

Origin blog.csdn.net/weixin_43901866/article/details/113629354