Android基础

**

Activity生命周期

**:
在这里插入图片描述
在这里插入图片描述
**

启动标志

**:
在这里插入图片描述

avtivity启动模式:

standard 默认启动模式:每启动一个 都会创建一个新的activity 无论栈内是否有
singleTop 栈顶复用模式:如果栈顶的activity为你想要启动的activity,则会复用该activity 不会重新创建 但是A,B来回切换 则会一直创建很多 ,因为只有栈顶的才会复用
singleTask 栈内复用:如果栈内有你想要创建的activity,则会把该activity上边所有activity顶出栈 并直接使用该activity。
singleInstance 全局唯一模式:活动被设置吃模式 启动该任务则会新建一个栈 里边只能存放该一个activity ,下次启动该activity则会直接跳到该栈

用法 在AndroidMainfest.xml中 activity头标签内 launchMode=“standard

动态设置启动模式
intent.setFlags(); 在java代码中设置启动模式

1.Intent. FLAG_ACTIVITY_CLEAR_TOP:目标 Activity 会检查 Task 中是否存在此实例,如果没有则添加压入栈如果有,就将位于 Task 中的对应 Activity 其上的所有 Activity 弹出栈 这样 不会来回做无用的跳转在A B之间 而不退出应用。
2.Intent.FLAG_ACTIVITY_SINGLE_TOP
3.Intent.FLAG_ACTIVITY_NEW_TASK:与Intent.FLAG_ACTIVITY_CLEAR_TASK 并集使用 会清空当前栈 并新建一个任务栈 存放新开启的活动 例如(登陆界面,验证码界面 ,找回密码 )这样退出应用不会再回到这些界面

Fragmentment生命周期

在这里插入图片描述

1:生命周期,Fragment的生命周期看起来和Activity的生命周期类似,但是多了一些,因为Fragment的生命周期是和其关联的Activity有关。

(1)onAttach(Context context):在Fragment和Activity关联上的时候调用,且仅调用一次。在该回调中我们可以将context转化为Activity保存下来,从而避免后期频繁调用getAtivity()获取Activity的局面,避免了在某些情况下getAtivity()为空的异常(Activity和Fragment分离的情况下)。同时也可以在该回调中将传入的Arguments提取并解析,在这里强烈推荐通过setArguments给Fragment传参数,因为在应用被系统回收时Fragment不会保存相关属性,具体之后会讲解。

(2)onCreate:在最初创建Fragment的时候会调用,和Activity的onCreate类似。

(3)View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState):在准备绘制Fragment界面时调用,返回值为Fragment要绘制布局的根视图,当然也可以返回null。注意使用inflater构建View时一定要将attachToRoot指明false,因为Fragment会自动将视图添加到container中,attachToRoot为true会重复添加报错。onCreateView并不是一定会被调用,当添加的是没有界面的Fragment就不会调用,比如调用FragmentTransaction的 add(Fragment fragment, String tag)方法。

(4)onActivityCreated :在Activity的onCreated执行完时会调用。

(5)onStart() :Fragment对用户可见的时候调用,前提是Activity已经started。

(6)onResume():Fragment和用户之前可交互时会调用,前提是Activity已经resumed。

(7)onPause():Fragment和用户之前不可交互时会调用。

(8)onStop():Fragment不可见时会调用。

(9)onDestroyView():在移除Fragment相关视图层级时调用。

(10)onDestroy():最终清楚Fragment状态时会调用。

(11)onDetach():Fragment和Activity解除关联时调用。

Service 生命周期

在这里插入图片描述
生命周期方法说明:
onCreate() :
首次创建服务时,系统将调用此方法。如果服务已在运行,则不会调用此方法,该方法只调用一次。

onStartCommand() :
当另一个组件通过调用startService()请求启动服务时,系统将调用此方法。

onDestroy() :
当服务不再使用且将被销毁时,系统将调用此方法。

onBind() :
当另一个组件通过调用bindService()与服务绑定时,系统将调用此方法。

onUnbind() :
当另一个组件通过调用unbindService()与服务解绑时,系统将调用此方法。

onRebind() :
当旧的组件与服务解绑后,另一个新的组件与服务绑定,onUnbind()返回true时,系统将调用此方法。

2、生命周期方法
在Service的生命周期里,常用的方法有:

手动调用的方法 :
startService() 启动服务
stopService() 关闭服务
bindService() 绑定服务
unbindService() 解绑服务

自动调用的方法 :
onCreate() 创建服务
onStartCommand() 开始服务
onDestroy() 销毁服务
onBind() 绑定服务
onUnbind() 解绑服务

生命周期调用

  1. 启动Service服务

单次:startService() —> onCreate() —> onStartCommand()
多次:startService() —> onCreate() —> onStartCommand() —> onStartCommand()
2. 停止Service服务

stopService() —> onDestroy()
3. 绑定Service服务

bindService() —> onCreate() —> onBind()
4. 解绑Service服务

unbindService() —> onUnbind() —> onDestroy()
5. 启动绑定Service服务

startService() —> onCreate() —> onStartCommand() —> bindService() —> onBind()
6. 解绑停止Service服务

unbindService() —> onUnbind() —> stopService() —> onDestroy()
7. 解绑绑定Service服务

unbindService() —> onUnbind(ture) —> bindService() —> onRebind()
总结:
(1) 被启动的服务的生命周期

如果一个Service被某个Activity 调用 Context.startService 方法启动,那么不管是否有Activity使用bindService绑定或unbindService解除绑定到该Service,该Service都在后台运行。如果个Service被startService 方法多次启动,那么onCreate方法只会调用一次,onStart将会被调用多次(对应调用startService的次数),并且系统只会创建Service的一个实例。该Service将会一直在后台运行,而不管对应程序的Activity是否在运行,直到被调用stopService,或自身的stopSelf方法。当然如果系统资源不足,android系统也可能结束服务。

(2) 被绑定的服务的生命周期

如果一个Service被某个Activity 调用 Context.bindService 方法绑定启动,不管调用 bindService 调用几次,onCreate方法都只会调用一次,同时onStart方法始终不会被调用。当连接建立之后,Service将会一直运行,除非调用Context.unbindService 断开连接或者之前调用bindService 的 Context 不存在了(如Activity被finish的时候),系统将会自动停止Service,对应onDestroy将被调用。

(3) 被启动又被绑定的服务的生命周期

如果一个Service又被启动又被绑定,则该Service将会一直在后台运行。并且不管如何调用,onCreate始终只会调用一次,对应startService调用多少次,Service的onStart便会调用多少次。调用unbindService将不会停止Service,而必须调用 stopService 或 Service的 stopSelf 来停止服务。

(4) 当服务被停止时清除服务

当一个Service被终止(1、调用stopService;2、调用stopSelf;3、不再有绑定的连接(没有被启动))时,onDestroy方法将会被调用,在这里你应当做一些清除工作,如停止在Service中创建并运行的线程。

**

OkHttp:

**
https://cloud.tencent.com/developer/article/2249967
Gson 解析json时用到泛型是需要 用到TypeToken
TypeToken类是用来解决java运行时泛型类型被擦除的问题的。通过TypeToken的 getType()可以获得具体的参数类型
https://www.jianshu.com/p/cdea9a8db18b

第二个向第一个 传数据:

第一个启动模式设置为这样: 0为requestCode

startActivityForResult(intent, 0);

第二个活动 的按钮监听里加入

setResult(RESULT_ok,intent);
finish();

第一个活动重写onCreatResult()方法:三个参数

// 从下一个页面携带参数返回当前页面时触发。其中requestCode为**请求代码**,
// resultCode为**结果代码**,intent为下一个页面返回的**意图对象**
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent)
{ // 接收返回数据
super.onActivityResult(requestCode, resultCode, intent);
// 意图非空,且请求代码为之前传的0,结果代码也为成功
if (intent!=null && requestCode==0 && resultCode== Activity.RESULT_OK) {
Bundle bundle = intent.getExtras(); // 从返回的意图中获取快递包裹
// 从包裹中取出名叫response_time的字符串
String response_time = bundle.getString("response_time");
// 从包裹中取出名叫response_content的字符串
String response_content = bundle.getString("response_content");
String desc = String.format("收到返回消息:\n应答时间为:%s\n应答内容为:%s",
response_time, response_content);
tv_response.setText(desc); // 把返回消息的详情显示在文本视图上
}
}

弹出对话

三个参数:那个活动显示 显示的内容 显示的时间
别忘了 .show();

Toast.makeText(MainActivity.this,"您点了返回",Toast.LENGTH_SHORT).show();

创建三个菜单选项

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main,menu);
        //inflate方法 两个参数: 那个资源文件  那个menu对象 用 参数才能进来的那个
        return true;
    }
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
    switch (item.getItemId()){
        case R.id.back_item:
            Toast.makeText(MainActivity.this,"您点了返回",Toast.LENGTH_SHORT).show();
            break;
        case R.id.share_item:
            Toast.makeText(MainActivity.this,"您点了分享",Toast.LENGTH_SHORT).show();
            break;
        case R.id.refresh_item:
            Toast.makeText(MainActivity.this,"您点了刷新",Toast.LENGTH_SHORT).show();
            break;
    }
    return true;
    // true则表示显示菜单
}
<!--创建三个菜单选项 三个item-->
	//id是标识  title是文本
    <item android:id="@+id/refresh_item"
        android:title="@string/refresh_menu"/>
    <item android:id="@+id/back_item"
        android:title="@string/back_menu"/>
    <item android:id="@+id/share_item"
        android:title="@string/share_menu"/>

SQLite使用方法:

创建一个类 继承SQLiteDatabaseHelper(抽象类) 重写 两个抽象方法(一个创建的 一个更新数据库的)
在创建的方法中 调用 对象.execSQL( string s) 把SQL语句放进去 创建database;
私有化一个 本类的对象 并设置 单例模式 ;并设置 打开 关闭读写的方法 对象.getWritableDatabase(); 对象.getRritableDatabase(); 在activity的 onStart方法中 调用这个方法 :并设置 .close方法 在onDestory方法中调用
插入数据 需要用到一个 context Values 类的 vilues 把数据 用键值对put到values中。
查询数据 返回一个 游标cursor 在while中调用.moveToNext:移动游标到下一条记录。
把游标中的内容取出来 最后 cursor.close

SQL事务:

beginTransaction:开始事务。
setTransactionSuccessful:设置事务的成功标志。
endTransaction:结束事务。执行本方法时,系统会判断之前是否调用了
setTransactionSuccessful方法,如果之前已调用该方法就提交事务,如果没有调用该方法就回滚
事务。
在Try 中开启事务 追后 结束事务 Catch中抛出异常 finaly中 提交事务;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值