Men的博客

欢迎光临!

0%

Android开发整理

做安卓开发也算是有一些时间了,一直都没有想过要整理一些东西,最近不是太忙,想着能整理一些,对自己也是一个提升吧。
我没有什么整理的头绪,也没有什么脉络,其实网上有很多好的博客整理的比较好,我顺便就抄写下来,也算是对自己的巩固吧。
Android项目目录结构
Activity:应用被打开时显示的界面
src:项目代码
R.java:项目所有的资源文件
Android.jar:Android的jar包,倒入此包方可使用Android的api
libs:导入第三方jar包
assets:存放资源文件,比如mp3,视频文件
bin:存放编译打包的文件
res:存放资源文件
drawable:存放图片文件
layout:存放布局文件
menu:定义菜单的样式
String.xml:存放字符串资源

Android的配置文件
指定应用的包名
package= “com.item.helloworld”
data/data/com.item.helloworld
应用生成的文件都在此路径
Android的四大组件使用前全部都需要在此清单文件中配置

常用的adb指令
adb start-server :启动adb进程
adb kill-server: 杀死进程
adb divices :查看当前开发环境链接的设备
adb install xxx.apk 往模拟器安装apk
adb uninstall 包名: 删除模拟器中应用
adb shell : 进入linux命令

常用布局:线性布局
LinerLayout
指定各个节点排列方向
android:orientation = “horizontal”
设置右对齐
android:layout_gravity=”right”
当竖直布局时,只能左右对齐和水平居中,顶部底部对齐竖直剧中无效
当水平对齐时,只能顶部底部对齐,和竖直居中
线性布局非常重要的一个属性:权重
android:layout_weight=’1’
权重:按照比例分配屏幕的剩余宽度或者高度

常见布局:相对布局
RelativeLayout
组件默认左对齐,顶部对齐
设置组件制定组件的右边
android:layout_toRightOf=”id/tv1”
设置右对齐父控件
android:layout_alignParentRight=”true”

帧布局:FrameLayout
默认组件都是左对齐和顶部对齐,每个组件相当于一个div

文件读写操作
Ram内存:运行内存,相当于电脑内存
Rom内存:内部存储空间,相当于电脑硬盘
sd卡:外部存储空间,相当于电脑移动硬盘
//持久化保存数据
File file = new File(“data/data/com.itheima.rwinrom/info.txt”);
FileOutputStream fos = new FileOutputStream(file);
fos.write((name + “##” + pass).getBytes());
fos.close();
读取数据前先检测文件是否存在
if(file.exists())
读取保存的数据,也是直接开文件输入流读取
File file = new File(“data/data/com.itheima.rwinrom/info.txt”);
FileInputStream fis = new FileInputStream(file);
//把字节流转换成字符流
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
String text = br.readLine();
String[] s = text.split(“##”);

SharePreference
用于存储账号密码
往SharePrefreence写数据
拿到一个SharePreference对象
SharePrefrence sp = getSharePrefenrences(“config”,MODE_PRIVATE);
拿到编辑器
Editor ed = sp.edit();
写数据
ed.putBoolen(“name”,name)
ed.commit();
从SharedPreference里取数据
SharedPreferences sp = getSharedPreferences(“config”, MODE_PRIVATE);
//从SharedPreference里取数据
String name = sp.getBoolean(“name”, “”);

ListView
MVC结构
M:model模型层,要显示的数据集合
V:view试图层,用户看到的界面–ListView
C:controller控制层,操作数据如何显示—adapter对象

BaseAdapter

必须实现的两个方法

第一个

//系统调用此方法,用来获知模型层有多少条数据
@Override
public int getCount() {
return people.size();
}

第二个

//系统调用此方法,获取要显示至ListView的View对象
//position:是return的View对象所对应的数据在集合中的位置
@Override
public View getView(int position, View convertView, ViewGroup parent) {
System.out.println(“getView方法调用” + position);
TextView tv = new TextView(MainActivity.this);
//拿到集合中的元素
Person p = people.get(position);
tv.setText(p.toString());

//把TextView的对象返回出去,它会变成ListView的条目
return tv;
}

消息队列
主线程创建时,系统会同事创建消息队列对象(MessageQueue)和消息轮询器对象(Looper)
轮询器的作用,就是不停的检测消息队列中是否有消息(Message)
Looper一旦发现Message Queue中有消息,就会把消息取出来,然后把消息扔给Handler对象,Handler会调用自己HandleMessage方法处理这条消息
Handler handler = new Handler() {
主线程有一个消息轮询器looper,不断检测消息队列是否有新消息,如果发现有新消息,自动调用此方法,注意:此方法是主线程运行的
public void handleMessage(android.os.Message msg) {

}
}
在子线程中使用Handler对象往消息队列里发消息
创建消息对象
Message msg = new Message();
//消息的obj属性可以付给任意对象,通过这个属性可以携带数据
msg.obj = bm;
//what属性相当于一个标签,用于区分不同的消息,从而运行不同的代码
msg.what = 1
handler.sendMessage(msg);

Activity生命周期(掌握)

void onCreate()

Activity已经被创建完毕
void onStart()

Activity已经显示在屏幕,但没有得到焦点
void onResume()

Activity得到焦点,可以与用户交互
void onPause()

Activity失去焦点,无法再与用户交互,但依然可见
void onStop()

Activity不可见,进入后台
void onDestroy()

Activity被销毁
void onRestart()

Activity从不可见变成可见时会执行此方法

横竖屏写死
android:screenOrientation=”landscape”
android:screenOrientation=”portrait”
让系统的环境 不再去敏感横竖屏的切换。

android:configChanges=”orientation|screenSize|keyboardHidden”

进程优先级(掌握)

前台进程:拥有一个正在与用户交互的activity(onResume方法被调用)的进程
可见进程:拥有一个非前台,但是对用户可见的activity(onPause方法被调用)的进程
服务进程:拥有一个通过startService方法启动的服务的进程
后台进程:拥有一个后台activity(onStop方法被调用)的进程
空进程:没有拥有任何活动的应用组件的进程,也就是没有任何服务和activity在运行

样式与主题(熟悉)

样式与主题定义方式一样
样式用于布局文件中的组件
主题用于Activity

Fragment(重要)

用途:在一个Activity里切换界面,切换界面时只切换Fragment里面的内容
生命周期方法跟Activity一致,可以理解把其为就是一个Activity
fragment切换时会销毁旧的,再创建新的
定义布局文件作为Fragment的显示内容
//此方法返回的View就会被显示在Fragment上
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
//用布局文件填充成一个View对象,返回出去,那么就显示在Fragment上了
View v = inflater.inflate(R.layout.fragment01, null);
return v;
}
把Fragment显示至指定ViewGroup中

//把fragment显示至界面
//new出fragment对象
Fragment01 fg = new Fragment01();
FragmentManager fm = getFragmentManager();
//开启事务
FragmentTransaction ft = fm.beginTransaction();
//把fragment对象显示到指定资源id的组件里面
ft.replace(R.id.fl, fg);
ft.commit();
生命周期(重要)

fragment切换时旧fragment对象会销毁,新的fragment对象会被创建
在drawable目录下定义xml文件,子节点为animation-list,在这里定义要显示的图片和每张图片的显示时长

ImageView iv = (ImageView) findViewById(R.id.iv); //把动画文件设置为imageView的背景 iv.setBackgroundResource(R.drawable.animations); AnimationDrawable ad = (AnimationDrawable) iv.getBackground(); //播放动画 ad.start();