//-----------------------------------//
asset文件夹 和 res文件夹的区别
asset 文件夹不需要编译,需要用assetManger访问,可以获取 文件夹
res 文件夹需要编译,通过id访问资源,不能有子文件夹
//-----------------------------------//
服务启动的两种方式
startService() onCreate()—>onStartCommand()(onStart()方法已过时) —> onDestory()
一旦服务开启跟调用者(开启者)就没有任何关系了。
开启者退出了,开启者挂了,服务还在后台长期的运行。
开启者不能调用服务里面的方法。
bindService() onCreate() —>onBind()—>onunbind()—>onDestory()
bind的方式开启服务,绑定服务,调用者挂了,服务也会跟着挂掉。
绑定者可以调用服务里面的方法。
服务和线程之间的关系
//-----------------------------------//
broadcastreceiver两种注册方式区别
静态:manifest ,系统管理,所有receiver一目了然
动态:生命周期 需要在程序退出之前调用Context.unregisterReceiver()
发送广播
一般在onStart()中注册,在onStop()进行注销
sendBroadcast(intent) 发送广播
终止广播的方法abortBroadcast()
广播分哪几种:标准 和 有序
1.标准广播(无序广播) 特点:无序、异步,几乎同时接收到
2:.有序广播 特点:有序、同步,根据优先级高低执行,可以被截断
优先级
多线程
实现ui
三种获取url的方式 http
打开网络文件的输入流
Json error
//-----------------------------------//
SharedPreferences
SharedPreferences sp = getSharedPreferences("DATA",MODE_PRIVATE);
SharePreferences.Editor editor = sp.edit();
editor.putString("name","comi");
editor.commit();
取数据
SharedPreferences sp = getSharedPreferences("DATA",MODE_PRIVATE);
String name = sp.getString("name","");
//-----------------------------------//
文件
FileOutputStream outputStream;
String filename = "data";
String string = "hello world";
try{
outputStream = openFileOutput(filename,Context.MODE_PRIVATE);
outputStream.write(string.getbytes());
}catch(Exception e){
e.printStackTrace();
}
FileInputStream inputStream = openFileInput(filename);
byte[] bytes = new byte[1024];
StringBuffer sb = new StringBuffer();
while(inputStream.read(bytes) != -1){
sb.append(new String(bytes));
}
//-----------------------------------//
数据库
SQLiteDatabase 代表SQLITE数据库 有什么操作
insert()
delete()
update()
query()
OpenHelper是什么,主要方法 和SQLiteDatabase 的联系
主要方法:
构造方法
oncreate() //表创建
onupgrade() // 版本更新
getReadableDatabase() // 打开只读数据库
getWritableDatabase //打开读写数据库
OpenHelper 是SQLiteDatabase 的一个工具类 主要是用来生成数据库并进行管理
//-----------------------------------//
四种事件监听()
匿名内部类 btn.setonclicklistnener(new onclicklistenner(){ …})
标签绑定 在控件属性中加入android:onClick=“call”,在活动中必须加入相关方法且为public,否则控件没有点击事件。
在主类中实现接口 btn.setOnClickLisenner(this);并实现onclick方法。
使用内部类 写一个类并继承ClickListener 并 btn.setOnClickListener(new MyListener());
//-----------------------------------//
四种启动模式
standard 标准启动模式 不会判断是否存在实例,每次都会生成一个实例
singleTask 单一存在模式 只会存在一个实例
singleTop 单一栈顶模式 如果栈顶存在实例直接调用,否则创建一个实例
singleInstance单一实例模式 只会创建一个实例
//-----------------------------------//
跳转intent(startactivity,startforResult)
onActivityResult
intent 传递参数
intent 描述意图:启动activity,发送广播,启动服务,intent 承担 通信功能
adapter layout viewGroup 放不同组件
//-----------------------------------//
几种布局 英文中文
线性布局 Linearlayout 常用
相对布局 Relativelayout 常用Layoutgravity gravity
网格布局 GridLayout 行 列设定
帧布局 或 框架布局 FrameLayout
限制布局 constraintLayout 可视化编程
文字 sp 组件 dp
//-----------------------------------//
什么是Arrayadapter
BaseAdapter最基本的几个方法:
1. getCount 填充的数据集数 return data.size();
2. getItem 数据集中指定索引对应的数据项 return data.get(i);
3. getItemId 指定行所对应的ID return i;
4. getView 每个Item所显示的类容
private List<Message> lists;
private MyAdapter adapter;
private ListView listView;
public View getView(int i, View view, ViewGroup viewGroup) {
listView = (ListView) findViewById(R.id.ll1);
lists = new ArrayList<>();
lists.add(new Message(R.mipmap.ic_launcher,"张三","你好,我是张三"));
lists.add(new Message(R.mipmap.ic_account,"李四","你好,我是李四"));
lists.add(new Message(R.mipmap.ic_password,"王五","你好,我是王五"));
adapter = new MyAdapter(lists,MainActivity.this);
lstView.setAdapter(adapter);
}
//-----------------------------------//
handler
负责在android中发送消息
looper
负责管理消息队列和消息循环
Message是信息的载体存放信息
sendMessage()
sendEmptyMessage()
snedMessageAtTime()
obtainMessage()获取一个message对象
Message.what用来有Hander中用来标识是哪一个子线程发送过来的数据
//-----------------------------------//
AsyncTask
在主线程ui之外运行,避免了使用handler带来的麻烦
params 启动任务需要的参数
progress 后台任务进度
result 后台任务返回结果
方法
onPreExecute 提前准备工作
doInBackground 后台执行任务
publishProgress 实时更新任务进度
publishProgressUpdate 更新ui
onPostExcute 执行任务之后返回结果
//-----------------------------------//
Alertdiglog
AlertDialog.Builder builer = new AlertDialog.Builder(this);
builder.setTitle("title");
builder.setCancelable(false);
builder.setMessage("content");
监听 为DialogInterface.OnClickListener
setPositiveButton,setNativiteButton
builder.setPositiveButton("是的", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(context, "你点击了是的", Toast.LENGTH_SHORT).show();
dialog.dismiss();
}
});
builder.create();
builder.show();
//-----------------------------------//
contentPrivider
不同应用之间数据共享的标准api
就是把自己私有的数据库内容通过contentPrivider给暴露出来
//-----------------------------------//
四大组件:
- Activity(活动): 用于表现功能 三种,四种状态 ,启动方式,startforresult
- Service(服务):后台运行服务,不提供界面呈现
- BroadcastReceiver(广播接收器):用于接收广播
- ContentProvider(内容提供器):支持在多个应用中存储和读取数据,相当于数据库
//-----------------------------------//
LogCat的使用:
LogCat:日志,程序运行的过程中打印出的信息。
LogCat区域的日志共分为5级:
Log.v() VERBOSE显示全部信息,黑色。
Log.d() DEBUG显示调试信息,蓝色。
Log.i() INFO显示一般信息,绿色。
Log.w() WARN显示警告信息,橙色。
Log.e() ERROR显示错误信息,红色。
//-----------------------------------//
View的点击事件:
方法1:监听器绑定到标签
android:onClick=“call”;
public void call(View view ){
System.out.println("View 是"+view);
System.out.println("通过反射实现点击事件");
}
}
方法2:使用内部类
btn.setOnClickListener(new MyListener());
class MyListener implements View.onClickListener…… //重写onclick方法
方法3:使用匿名内部类
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
System.out.println("使用匿名内部类实现点击事件");
}
});
}
方法4:主类实现OnClickListener接口
重写onClick方法
btn.setOnClickListener(this);
//-----------------------------------//
泛型
将类型参数化以达到代码复用提高软件开发工作效率的一种数据类型
优点:使用泛型类型可以最大限度地重用代码、保护类型的安全以及提高性能。
本质:泛型是参数化类型的应用,操作的数据类型不限定于特定类型,可以根据实际需要设置不同的数据类型,以实现代码复用。
//-----------------------------------//
异步任务:
在主线程ui之外运行,为UI的更新只能在主线程中完成
//-----------------------------------//
跨线程更新ui
1.其他线程委托ui线程更新ui
2.通过handler 发送message更新ui
3.使用asyncTask
//-----------------------------------//
Cursor
常用方法
move()
movetoFirst()
movetoLast()
movetoNext()
movetoPrivious()
movetoPosition()
//-----------------------------------//
切入后台
Back
Onpause()
Onstop()
Ondestory()
home
Onpause()
Onstop()
后台返回
Back
Oncreate()
Onstart()
Onresume()
Home
Onrestart()
Onstart()
Onresume()
//-----------------------------------//
Finish
将进程推向后台,并没有马上杀死,调用ondestory()
System.exit(0)
马上退出,杀死进程
//-----------------------------------//
Intent 用于启动Activity 服务 广播 承担三大组件通信
普通intent
跳转当前页面
StartActivityForResult(intent,requestCode)
Intent 启动的activity
RequestCode 请求码,StartActivityForResult传递的值
新的activity 在关闭之前需要设置返回值setResult()
Intent intent = new intent();
Intent.putExtra(“result”,”I am ok “);
NewActivity.this.setResult(RESULT_OK,intent);
NewActivity.this.finish();
接收数据
onActivityResult(int requestCode,int resultCode,intent){
requestCode 为 启动时传递的值
resultCode 为newactivity返回的值
intent 返回数据
}
Intent 传递数据 若干数据 bundle
Intent intent = new intent();
Bundle bundle = new Bundle()
bundle.putString(“name”,comi);
bundle.putString(“age”,15);
intent.putExtras(bundle);
startActivity(intent);
单个数据 putExtra
Intent intent = new intent();
intent.putExtra(“name”,comi);
intent.putExtra(“age”,15);
startActivity(intent);
Intent 接收数据
Bundle bundle = getIntent.getExtras();
Bundle.getString(“name”);
Bundle.getString(“age”);
Intent intent = getIntent();
Intent.getString(“name”);