2024年安卓最全Android开发实用代码片段(一),程序员去大公司面试

最后

写到这里也结束了,在文章最后放上一个小小的福利,以下为小编自己在学习过程中整理出的一个学习思路及方向,从事互联网开发,最主要的是要学好技术,而学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯,更加需要准确的学习方向达到有效的学习效果。

image

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

    }

    else

    {

        strTempPath = String.valueOf(context.getCacheDir());

    }



    if(strTempPath.equalsIgnoreCase("null"))

    {

        strTempPath = String.valueOf(context.getCacheDir());

    }

    if (!strTempPath.endsWith("/"))

    {

        strTempPath += "/";

    }



    File file = new File(strTempPath);

    if (!file.exists())

    {

        file.mkdirs();

    }

    return strTempPath;

}



获取sd卡路径



/**

 *  Android SD卡路径

 */

public String getSDPath(){

    File sdDir = null;

    boolean sdCardExist = Environment.getExternalStorageState()

            .equals(Environment.MEDIA_MOUNTED);   //判断sd卡是否存在

    if   (sdCardExist)

    {

        sdDir = Environment.getExternalStorageDirectory();//获取根目录

    }

    return sdDir.toString();

}

使用时:在后面加上斜杠,在加上文件名   

String fileName = getSDPath() +"/" + name;//以name存在目录中  



注意添加权限




  

假如出现以下错误



Android中的文件存储位置:java.io.FileNotFoundException: xxx: open failed: EROFS (Read-only file system)

==============================================================================================



保存文件时路径不对,貌似是少了个“/”。



最好用File fullFilename = new File(extDir, filename);  代替 File f2=new File(path);



**7.对整个屏幕视图进行截屏并生成图片**  



Android中经常会遇到把View转换为Bitmap的情形,比如,对整个屏幕视图进行截屏并生成图片.



网上收集到有2种方法



public static Bitmap convertViewToBitmap(View view, int bitmapWidth, int bitmapHeight){

    Bitmap bitmap = Bitmap.createBitmap(bitmapWidth, bitmapHeight, Bitmap.Config.ARGB_8888);

    view.draw(new Canvas(bitmap));

    

    return bitmap;

}

或者



public static Bitmap convertViewToBitmap(View view){

   view.buildDrawingCache();

Bitmap bitmap = view.getDrawingCache();

return bitmap;

}


一般情况下,这2个方法能够正常的工作。但有时候,生成Bitmap会出现问题(Bitmap全黑色)。主要原因是 drawingCache的值大于系统给定的值。



较好的解决方案是



public static Bitmap convertViewToBitmap(View view){

view.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));

    view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());

    view.buildDrawingCache();

    Bitmap bitmap = view.getDrawingCache();

return bitmap;

}


**8.Android三种实现定时器的方法**  



方法一:Handler+Thread



import android.app.Activity;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.widget.TextView;

/**

  • handler定时器

*/

public class HanderDemoActivity extends Activity {

TextView tvShow;  

private int i = 0;  



@Override  

public void onCreate(Bundle savedInstanceState) {  

    super.onCreate(savedInstanceState);  

    setContentView(R.layout.main);  

    tvShow = (TextView) findViewById(R.id.tv_show);  

    new Thread(new ThreadShow()).start();  

}  



// handler类接收数据  

Handler handler = new Handler() {  

    public void handleMessage(Message msg) {  

        if (msg.what == 1) {  

            tvShow.setText(Integer.toString(i++));  

            System.out.println("receive....");  

        }  

    };  

};  



// 线程类  

class ThreadShow implements Runnable {  



    @Override  

    public void run() {  

        // TODO Auto-generated method stub  

        while (true) {  

            try {  

                Thread.sleep(1000);  

                Message msg = new Message();  

                msg.what = 1;  

                handler.sendMessage(msg);  

                System.out.println("send...");  

            } catch (Exception e) {  

                // TODO Auto-generated catch block  

                e.printStackTrace();  

                System.out.println("thread error...");  

            }  

        }  

    }  

}  

}


方法二:Handler类自带的postDelyed



import android.app.Activity;

import android.os.Bundle;

import android.os.Handler;

import android.widget.TextView;

/**

  • handler定时器使用postDelyed实现

*/

public class HanderDemoActivity extends Activity {

TextView tvShow;

private int i = 0;

private int TIME = 1000;



@Override

public void onCreate(Bundle savedInstanceState) {

	super.onCreate(savedInstanceState);

	setContentView(R.layout.main);

	tvShow = (TextView) findViewById(R.id.tv_show);

	handler.postDelayed(runnable, TIME); //每隔1s执行

}



Handler handler = new Handler();

Runnable runnable = new Runnable() {



	@Override

	public void run() {

		// handler自带方法实现定时器

		try {

			handler.postDelayed(this, TIME);

			tvShow.setText(Integer.toString(i++));

			System.out.println("do...");

		} catch (Exception e) {

			// TODO Auto-generated catch block

			e.printStackTrace();

			System.out.println("exception...");

		}

	}

};

}


方法三:Handler+Timer+TimerTask  

import java.util.Timer;

import java.util.TimerTask;

import android.app.Activity;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.widget.TextView;

/**

  • 定时器实现:Handler+Timer+TimerTask

*/

public class HanderDemoActivity extends Activity {

TextView tvShow;  

private int i = 0;  

private int TIME = 1000;  



@Override  

public void onCreate(Bundle savedInstanceState) {  

    super.onCreate(savedInstanceState);  

    setContentView(R.layout.main);  

    tvShow = (TextView) findViewById(R.id.tv_show);  

    timer.schedule(task, 1000, 1000); // 1s后执行task,经过1s再次执行  

}  



Handler handler = new Handler() {  

    public void handleMessage(Message msg) {  

        if (msg.what == 1) {  

            tvShow.setText(Integer.toString(i++));  

        }  

        super.handleMessage(msg);  

    };  

};  

Timer timer = new Timer();  

TimerTask task = new TimerTask() {  



    @Override  

    public void run() {  

        // 需要做的事:发送消息  

        Message message = new Message();  

        message.what = 1;  

        handler.sendMessage(message);  

    }  

};  

}


综合比较三种方法,**推荐第二个**。因为第一个Thread.sleep会占用线程资源,当Sleep的时候,就等于说:现在我不用,但是你也别想用。虽然没占用CPU资源,但是阻碍了线程的调度。第三个话,在run方法中会不断的new 对象,为了实现定时,而不断创建对象而浪费资源,不合算。



**9.Android 倒计时功能**



主要是利用了CountDownTimer类



class TimeCount extends CountDownTimer {

	public TimeCount(long millisInFuture, long countDownInterval) {

		super(millisInFuture, countDownInterval);// 参数依次为总时长,和计时的时间间隔

	}



	@Override

	public void onFinish() {// 计时完毕时触发

		bt.setText("重新验证");

		bt.setClickable(true);

		bt.setBackgroundColor(0x77ffffff);

	}



	@Override

	public void onTick(long millisUntilFinished) {// 计时过程显示

		bt.setClickable(false);

		bt.setBackgroundColor(0x77cccccc);

		bt.setText("还剩下"+millisUntilFinished / 1000 + "秒");

	}

}

要用的时候```

mTimeCount=new TimeCount(10000, 1000);

		mTimeCount.start();

10,Android常用Http请求的封装

先定义请求结果返回的接口


/**

 * 回调服务返回的接口

 *

 */

public interface HttpCallbackListener {



	void onFinish(String response);



	void onError(Exception e);



}

请求代码


import java.io.BufferedReader;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.net.HttpURLConnection;

import java.net.URL;



import android.util.Log;



public class HttpUtil {

	public static void sendHttpRequest(final String address,

			final HttpCallbackListener httpCallbackListener) {

		new Thread(new Runnable() {

			@Override

			public void run() {

				//HttpURLConnection

				HttpURLConnection connection = null;

				try {

					URL url = new URL(address);

					connection = (HttpURLConnection) url.openConnection();

					connection.setRequestMethod("GET");

					connection.setReadTimeout(8000);

					connection.setConnectTimeout(7000);

					InputStream is = connection.getInputStream();

					BufferedReader bReader = new BufferedReader(

							new InputStreamReader(is));

					StringBuilder response = new StringBuilder();

					String line;

					while ((line = bReader.readLine()) != null) {

						response.append(line);

					}

					if (httpCallbackListener != null) {

						// 回调onFinish()方法

						httpCallbackListener.onFinish(response.toString());

						Log.d("返回的数据是:-->", response.toString());

					}

				} catch (Exception e) {

					

					if (httpCallbackListener != null) {

						// 回调onError()方法

						httpCallbackListener.onError(e);

					}

				} finally {

					if (connection != null) {

						connection.disconnect();

					}

				}

			}


### 最后

简历首选内推方式,速度快,效率高啊!然后可以在拉钩,boss,脉脉,大街上看看。简历上写道熟悉什么技术就一定要去熟悉它,不然被问到不会很尴尬!做过什么项目,即使项目体量不大,但也一定要熟悉实现原理!不是你负责的部分,也可以看看同事是怎么实现的,换你来做你会怎么做?做过什么,会什么是广度问题,取决于项目内容。但做过什么,达到怎样一个境界,这是深度问题,和个人学习能力和解决问题的态度有关了。大公司看深度,小公司看广度。大公司面试你会的,小公司面试他们用到的你会不会,也就是岗位匹配度。

面试过程一定要有礼貌!即使你觉得面试官不尊重你,经常打断你的讲解,或者你觉得他不如你,问的问题缺乏专业水平,你也一定要尊重他,谁叫现在是他选择你,等你拿到offer后就是你选择他了。

另外,描述问题一定要慢!不要一下子讲一大堆,慢显得你沉稳、自信,而且你还有时间反应思路接下来怎么讲更好。现在开发过多依赖ide,所以会有个弊端,当我们在面试讲解很容易不知道某个方法怎么读,这是一个硬伤......所以一定要对常见的关键性的类名、方法名、关键字读准,有些面试官不耐烦会说“你到底说的是哪个?”这时我们会容易乱了阵脚。正确的发音+沉稳的描述+好听的嗓音决对是一个加分项!

最重要的是心态!心态!心态!重要事情说三遍!面试时间很短,在短时间内对方要摸清你的底子还是比较不现实的,所以,有时也是看眼缘,这还是个看脸的时代。

希望大家都能找到合适自己满意的工作!


**进阶学习视频**

![](https://img-blog.csdnimg.cn/img_convert/89d1390e07a77c5553d703a1a77f1b2c.webp?x-oss-process=image/format,png)

**附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题** (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)

![](https://img-blog.csdnimg.cn/img_convert/6f18ff8bafeb3432891b50ab3681ad56.webp?x-oss-process=image/format,png)




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618156601)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

自信,而且你还有时间反应思路接下来怎么讲更好。现在开发过多依赖ide,所以会有个弊端,当我们在面试讲解很容易不知道某个方法怎么读,这是一个硬伤......所以一定要对常见的关键性的类名、方法名、关键字读准,有些面试官不耐烦会说“你到底说的是哪个?”这时我们会容易乱了阵脚。正确的发音+沉稳的描述+好听的嗓音决对是一个加分项!

最重要的是心态!心态!心态!重要事情说三遍!面试时间很短,在短时间内对方要摸清你的底子还是比较不现实的,所以,有时也是看眼缘,这还是个看脸的时代。

希望大家都能找到合适自己满意的工作!


**进阶学习视频**

[外链图片转存中...(img-9yXil98U-1715740219315)]

**附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题** (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)

[外链图片转存中...(img-7o9EZNze-1715740219315)]




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618156601)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值