1.学习工具及工具连接

学习工具:Android Studio和夜神模拟器;

连接:在资源管理器中找到模拟器的安装目录下的bin文件夹,输入cmd,直接定位

输入:nox_adb.exe connect 127.0.0.1:62001

2.Android虚拟设备的缩写:AVD

Android一词的本义指“机器人”,同时也是基于Linux平台的开源手机操作系统的名称,主要使用于移动设备,如智能手机和平板电脑,由美国Google公司和开放手机联盟领导及开发,第一个完整的,开放的,免费的智能移动开发平台,

        Android SDK目前支持的操作系统是:Linux

3.Android的特点

免费开放的平台,多媒体支持多种音频、视频格式,支持照相机、GPS、指南针和加速度仪等传感器硬件,支持蓝牙Bluetooth,3G和WIFI,SQLite作为结构化数据存储。

4.Android系统的四大组件

       Activity是Android中最基本的元素,负责与用户交互的组件,代表可视的一屏,构造应用程序界面的组件,一个Activity中可以放置多个控件,如按钮等,也可以理解为控件的容器

       Content Provider:Android有一个独特之处就是,数据库只能被它的创建者所使用,其他的应用是不能访问到的,所以如果你想实现不同应用之间的数据共享,就不得不用Provider;Android中的Content Provider机制可支持在多个应用中存储和读取数据,这也是跨应用共享数据的唯一方式;提供了存储和获取数据提供了统一的接口;在不同的应用之间共享数据。

(内容提供器ContentProvider:作用是实现数据共享和交换,是Android实现跨程序数据共享的标准方式;搭配ContentResolver使用,增删改查方法都在ContentResolver对象中,可以在Activity中得到ContentResolver实例对象的方法是getContentResolver().

       Service是不可见的后台运行的程序,可以为整个应用程序提供服务支持;后台长期运行的服务(如音乐播放器,下载服务等);进程间的调用服务;无需同用户进行交互(无UI)

       Broadcast:是Android中的四大组件之一,是在组件之间传播数据的一种机制。广播的发送者和接收者事先是不需要知道对方的存在的。这样带来的好处便是,系统的各个组件可以松耦合地组织在一起,这样系统就具有高度的可扩展性,容易与其他系统进行集成。比如发送短信、打电话。(接收广播)

(Broadcast具有特性:1.广播接收者的生命周期是非常短暂的,在接收到广播的时候创建,onReceive()方法结束之后销毁。2.广播接收者中不要做一些耗时的工作,否则会弹出Application No Response错误对话框。3.最好也不要在广播接收者中创建子线程做耗时的工作,因为广播接收者被销毁后进程就成为了空进程,很容易被系统杀掉。4.耗时的较长的工作最好放在服务中完成.)

5.Activity四种基本状态

(1)Active/Running

一个新Activity启动入栈后,它显示在屏幕最前端,处理是处于栈的最顶端,此时它处于可见并可和用户交互的激活状态,叫做活动状态或者运行状态

(2)Paused

当Activity失去焦点,被一个新的非全屏的Activity或者一个透明的Activity被放置在栈顶,此时的状态叫做暂停状态(Paused),此时它依然与窗口管理器保持连接,Activity依然保持活力(保持所有的状态、成员信息,和窗口管理器保持连接),但是在系统内存极端低下的时候被强行终止掉,所以它仍然可见,但已经失去了焦点故不可与用户进行交互.

(3)Stopped

如果一个Activity被另外的Activity完全覆盖掉,叫做停止状态(Stopped).它仍然保持所有状态和成员信息,但是它不再可见,所以它的窗口被隐藏,当系统内存需要被用在其他地方的时候,stopped的Activity将被强行终止掉.

(4)Killed

如果一个Activity是Paused或者Stopped状态,系统可以将该Activity从内存中删除,Android系统采用两种方式进行删除,要么要求该Activity结束,要么直接终止它的进程.当该Activity再次显示给用户时,它必须重新开始和重置前面的状态.

6.activity生命周期方法——简答

(1)onCreate:表示Activity正在被创建,这是生命周期的第一个方法,可以在该方法中做一些初始化工作。

(2)onStart:表示Activity正在被启动,即将开始,这时Activity已经可见了,但是还没有出现在前台,还无法和用户进行交互。

(3)onRestart:表示Activity正在重新启动。一般情况吓,当当前Activity从不可见重新变为可见状态时,onRestart就会被调用

(4)onResume:表示Activity已经可见了,并且出现在前台并开始活动.要注意这个和onStart的对比,onStart和onResume都表示Activity已经可见,但是onStart的时候Activity还在后台,onResume的时候Activity才显示到前台。

(5)onPause表示Activity正在停止,正常情况下,紧接着onStop就会被调用。在特殊情况下,如果这个时候快速地在回到当前Activity,那么onResume会被调用。这种情况属于极端情况,用户操作很难重现这一场景。此时可以做一些存储数据、停止动画等工作,但是注意不能太耗时,因为这回影响到Activity的显示,onPause必须先执行完,新Activity的onResume才会执行。

(6)onStop:表示Activity即将停止,可以做一些稍微重量级的回收工作,同样不能太耗时

(7)onDestory表示Activity即将被销毁,这是Activity生命周期中的最后一个回调。可以在该方法中做一些回收工作和最终的资源释放。

7.Android七大布局——简答

 (1)线性布局:LinearLayout

该布局可以使放入其中的组件以水平方式或者垂直方式整齐排列,通过Android:orientation属性指定具体的排列方式,通过weight属性设置每个组件在布局中所占的比重

(2)相对布局:RelativeLayout

这种布局方式是以一种让组件以相对于容器或者相对于容器中的另一个组件的相对位置进行放置的布局方式.

(3)表格布局:TableLayout

行列的方式管理组件

(4)层(帧)布局:FrameLayout

它指定屏幕上的一块空白区域 ,在该区域填充一个单一对象

(5)绝对布局:AbsoluteLayout

放入该布局的组件需要通过Android:layout_x和Android:layout-y两个属性指定其准确的坐标值,并显示在屏幕上.

(6)网格布局:GridLayout

网格布局相对于表格布局来说自由度更好,是以行数和列数来确定位置进行排列.

(7)约束布局:ConstraintLayout

可以按照比例约束控件位置和尺寸,更好适配屏幕大小的不同机型.

8.Toast:

可自定时长,单位毫秒,show()显示Toast

是一个 View 视图,快速的为用户显示少量的信息。 Toast 在应用程序上浮动显示信息给用户,它永远不会获得焦点,不影响用户的输入等操作,主要用于 一些帮助 / 提示。

9.信使intent:

负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此intent的描述,负责找到对应的组件,将intent传递给调用的组件,并完成组件的调用.①联系各应用元素的纽带②可通过其启动其他应用元素③在应用元素间传递数据

可以实现界面间的切换,可以包含动作和动作数据,连接四大组件的纽带

     intent启动组件:startActivity、startService、startActivityForResult

 intent.putExtra和getXXXExtra的使用:

putExtra和getXXXExtra用于程序内部或者程序之间的使用,putExtra指定要传递的数据,包含两个参数,键值对;getXXXExtra接收上个页面传递的参数,但是接收页面的获取不能用new intent,只能用getIntent.

10.Handler:

 Handler是一套Android消息传递机制,主要用于线程间通信     

       Handler对象:消息的真正处理者,具备获取消息,发送消息,处理消息,移除消息等功能.

 postDelayed方法可以实现延时自动启动,和intent对象配合在当前Activity停留多少时间后自动跳转.

11.selector:

是Android中常用的状态选择器,一般都用于实现组件背景的状态变换.

可以设置颜色状态和背景图的状态,常用的属性有设置是否按压状态(android:state_presses)、是否选中状态(android:state_selected)、设置是否勾选状态(android:state_checked)、设置勾选是否可用状态(android:state_focused)、设置触摸或点击时间是否可用状态,一般只在false时设置该属性,表示不可用状态(android:state_enabled)

12.fragment:

 意为"碎片、片段",可以将其看成小型的activity,也称为activity片段,即将屏幕划分成几个片段,在进行分组管理或模块化管理,更加方便地在运行过程中动态地更新activity的用户界面.Fragment不能单独使用,需要嵌套在Activity中使用.

Fragment的生命周期和Activity有点类似,有三种状态,Resumed(在允许中的Fragment可见)、Paused(所在Activity可见,但是得不到焦点)、Stoped(该Activity转向后台,或者该Fragment被替换/删除)

13.SharedPreferences:

Android本地内置的SharedPreferences存储适用于去保存一些简单的数据和键值对key value,适合单进程、小批量的数据存储与访问,当需要存储大量复杂的关系型数据的时候,就需要使用SQLite.

基于单个xml文件进行存储,所有持久化数据都是一次性加载到内存。

      属于移动存储解决方案、键值对存储、存放的数据类型不支持double、数据的保存格式是XML

getSharedPreferences("存储xml文件名称",操作模式):

作用:获取SharedPreferences对象。

参数:第一个参数指存储时的文件名称

存储位置:手机App本地 data/data/项目名<package name>/shared_prefs/data.xml

第二个参数指文件的操作模式(打开模式)

MODE_APPEND:追加方式存储,不覆盖原有文件

       MODE_PRIVATE:私有方式存储,其他应用无法访问,覆盖原有文件

       MODE_WORLD_READABLE:表示当前文件可以被其他应用读取

       MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入

       向SharedPreferences写入数据时,需要先获得的对象是Editor

14.Android事件模型:

是指安卓APP应用与用户进行交互时,捕捉用户对app的动作行为,并将其进行处理,响应给用户的整个流程。

事件模型的三大要素:事件Event(用户对App组件的动作行为产生一个事件)、事件源Event Source(App中的组件)、事件监听器Listener(对事件进行捕捉处理并响应的类和方法)

事件响应的处理方式:基于监听的事件响应方式(绑定指定监听器,并实现其监听函数),基于回调的事件响应方式(重写View中已经定义过的监听函数)

15.Android为view提供的5种事件处理的回调方法:

onKeyDown():该方法用来捕捉手机键盘被按下的事件

onKeyUp():该方法用来捕捉手机键盘按键抬起的事件

onTouchEvent():该方法处理手机屏幕的触摸事件

onTrackBallEvent():该方法是手机中轨迹球的处理方法

onFocusChanged():该方法是焦点改变的回调方法

16.方案设计题:

 如何定义一个服务后台通知,使用Service组件和Notification通知?

  1.自定义服务类,继承service类,重写其中的onCreate()和onBind()方法,其中在onCreate方法中编写通知的代码,使用时需要开启通知。

startForeground(1,notification),第一个参数为id,与其他通知的id不一样即可;第二个参数为自定义的通知对象。

onCreate关键代码如下:

NotificationManager manager=(NotificationManager)getSystemService(NOTIFICATION_SERVICE);
Notification notification=new NotificationCompat.Builder(this,"一般通知").setContentTitle("眼霜");startForeground(4,notification);
}

 2.AndroidManifests中配置文件 注册服务 代码如下

<serviceandroid:name=".shopcar.fragment.MyService"android:enabled="true"android:exported="true"/>

3.启动后台服务通知startService,如果当前类是Fragment碎片,还需要先获取窗体对象getActivity().

代码实例如下:

private void popServiceNotification(){getActivity().startService(new Intent(getContext(),MyService.class));
}

16.代码题: fragment切换代码(tabbar切换)

//方法二的包
//方法1的包
public class MainActivity extends AppCompatActivity {@BindView(R.id.rg_tabbar)RadioGroup rgTabbar;//    fragment切换写法2int position = 0;HomeFragmentTest homeFragment;CategoryFragment categoryFragment;FoundFragment foundFragment;ShopCarFragment shopCarFragment;MineFragment mineFragment;@BindView(R.id.rb_shopcar)RadioButton rbShopcar;GoodsBean goodsBean;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ButterKnife.bind(this);rgTabbar.check(R.id.rb_home);//        将toolBar样式去除if (getSupportActionBar() != null) {getSupportActionBar().hide();}int id = getIntent().getIntExtra("id", 0);switchTabbar(id);}//        切换tabbarprivate void switchTabbar(int position) {FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();//        隐藏所有fragmenthideAllFragments(transaction);transaction = getSupportFragmentManager().beginTransaction();switch (position) {case 0:if (homeFragment == null) {homeFragment = new HomeFragmentTest();transaction.add(R.id.fl_tabbar_content, homeFragment);} else {transaction.show(homeFragment);}break;case 1:if (categoryFragment == null) {categoryFragment = new CategoryFragment();transaction.add(R.id.fl_tabbar_content, categoryFragment);} else {transaction.show(categoryFragment);}break;case 2:if (foundFragment == null) {foundFragment = new FoundFragment();transaction.add(R.id.fl_tabbar_content, foundFragment);} else {transaction.show(foundFragment);}break;case 3:if (shopCarFragment == null) {shopCarFragment = new ShopCarFragment();transaction.add(R.id.fl_tabbar_content, shopCarFragment);rgTabbar.check(R.id.rb_shopcar);} else {transaction.show(shopCarFragment);rgTabbar.check(R.id.rb_shopcar);}break;case 4:if (mineFragment == null) {mineFragment = new MineFragment();transaction.add(R.id.fl_tabbar_content, mineFragment);} else {transaction.show(mineFragment);}break;default:break;}transaction.setTransitionStyle(FragmentTransaction.TRANSIT_FRAGMENT_FADE).commit();}//    fragment切换写法2@OnClick({R.id.rb_home, R.id.rb_category, R.id.rb_found, R.id.rb_shopcar, R.id.rb_mine})public void onViewCheckedChanged(RadioButton radioButton) {FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();//        隐藏所有fragment,并提交事务hideAllFragments(transaction);//        提交事务后,记得重新开启一个事务transaction = getSupportFragmentManager().beginTransaction();boolean isChecked = radioButton.isChecked();switch (radioButton.getId()) {case R.id.rb_home:position = 0;if (isChecked) {switchTabbar(position);}break;case R.id.rb_category:position = 1;if (isChecked) {switchTabbar(position);}break;case R.id.rb_found:position = 2;if (isChecked) {switchTabbar(position);}break;case R.id.rb_shopcar:position = 3;if (isChecked) {switchTabbar(position);}break;case R.id.rb_mine:position = 4;if (isChecked) {switchTabbar(position);}break;default:break;}}//    隐藏所有fragment,这个应该不会考private void hideAllFragments(FragmentTransaction transaction) {if (homeFragment != null) {transaction.hide(homeFragment);}if (categoryFragment != null) {transaction.hide(categoryFragment);}if (foundFragment != null) {transaction.hide(foundFragment);}if (shopCarFragment != null) {transaction.hide(shopCarFragment);}if (mineFragment != null) {transaction.hide(mineFragment);}transaction.setTransitionStyle(FragmentTransaction.TRANSIT_FRAGMENT_FADE).commit();}}

期末安卓——摆烂小白一天的复习生活相关推荐

  1. 不再摆烂,浅谈做本地生活如何选择靠谱服务商,少走弯路

    无论从事哪个行业,跟上时代步伐很重要,顺势而为,最怕的是别人在做的时候你一直在观望,2023大家都在争战抖音本地生活,那做本地生活如何选择靠谱服务商,这篇文章一定要看完你少走弯路 首先,在选择服务商之 ...

  2. 软件测试“摆烂”已经成为常态化,我们应该怎样冲出重围?

    网络日新月异发展的今天,每隔一段时间就会出现一些新的网络热词,最近"摆烂"成功突出重围,成为大家热议的中心.什么是"摆烂"?"摆烂"就是事情 ...

  3. 网络攻防技术(摆烂一天)

    网络攻防技术非常基础 1. 信息采集 信息采集的重点概念: 信息采集是黑客为了更有效的实施攻击而在攻击前对被攻击目标进行探测活动(信息渗透的过程) 信息采集是渗透重要的一部分:知道的越多就可能知道的更 ...

  4. UE风格化Day9-(摆烂特辑)原神石块砖材质欣赏

    因为要肝课程作业所以没时间了,所以没有进度产出,摆烂了一天 接下来要做石块砌体和地砖材质,先来参考参考原神材质(绝对不是摆烂玩游戏 雷树的场地:可以看到叠加了很多层细节,而且裂缝和苔藓纹理是不与砖块重 ...

  5. 小王的摆烂日记之6月工作总结

    数引系统基本已经完了,注意一下以后写算法一定要先写伪代码,别摆烂 卡尔曼滤波掌握的还可以,之后可以看一下惯导与GNSS数据融合的代码 之后的相关工作,DD的红外目标识别与追踪 先做调研!!!!

  6. 国庆回家计划满满最后却摆烂这件事(解决?)

    关于我想用此篇博客,记录一下我国庆荒废的日子,以及我自己总结的失去动力,进行摆烂该如何解决,希望对我,对我们都有用处,虽然我只是个平平无奇的小菜牙. 美好计划 现在距离假期时长还有五天,本来提前已经安 ...

  7. LeetCode 0870. 优势洗牌 - 【LetMeFly】趣解田忌赛马:能赢则赢,否则摆烂(贪心)

    [LetMeFly]趣解田忌赛马:能赢则赢,否则摆烂(贪心) - 870.优势洗牌 力扣题目链接:https://leetcode.cn/problems/advantage-shuffle/ 给定两 ...

  8. 14. 深度解读ARM新架构:大核进取、小核摆烂?

    众所周知,对于如今的绝大多数的智能手机.平板电脑,以及部分笔记本电脑产品来说,ARM可以说是"一切的源头".高通与三星的SoC近年来一直使用着ARM公版的CPU设计,而被公认&qu ...

  9. ctfshow 摆烂杯web wp

    考试前不想复(预)习,正好是ctfshow的摆烂杯,就去做了几道web题 文章目录 web签到 黑客网站 一行代码 web签到 题目要输入三个整数A.B.C,ABC均不可为0,让A³+B³+C³=11 ...

最新文章

  1. oracle学习笔记(一)------oracle基础知识和基本sql语句
  2. android layout background,Android LinearLayout Gradient Background
  3. c语言的运算答案,C语言运算符与表达式的练习题答案.doc
  4. 前谷歌技术主管亲述:程序员请避开这几大雷区
  5. funcode马里奥_MacGyvering马里奥·奥德赛跳绳挑战赛
  6. zabbix监控特殊端口(8080,80,8009等)
  7. 【mysql基础知识】解决java写入数据库时中文乱码的问题
  8. 速达软件开发版使用技巧-每页固定行样式报表设计
  9. Please create pull requests instead of asking for help on Homebrew‘s GitHubError: macOS 10.13
  10. python学习记录 - python3.x中如何实现print不换行
  11. 2021微信透明头像!真实有用
  12. phpQuery—基于jQuery的PHP实现
  13. 中文核心期刊目录 
  14. 如何删除下一页分节符_怎么去掉分节符下一页
  15. 一分钟教你搞定chrome的安装---redhat7.6如何安装谷歌浏览器
  16. 总结Windows查看产品密匙方法
  17. python实现——处理Excel表格(超详细)
  18. 手机端html5自动调用touch事件,移动端中touch事件的详解
  19. C#语言 Asp.net旅游网站在线旅游信息网站(旅游系统旅游网站)旅游管理系统旅游景区旅游网站
  20. YT8511H的原理图设计

热门文章

  1. 2020年10月中国编程语言排行榜
  2. new操作符的执行过程
  3. 实现聊天软件消息刷屏
  4. php 精品课程,基于PHP的精品课程教学网站
  5. kali firefox gah. your tab just crashed. 更新Firefox
  6. UWB:室内定位首选
  7. Codeforces 1428E Carrots for Rabbits 贪心
  8. tplink软件升级有用吗_如何升级路由器的软件(固件)?
  9. K8S在一个Pod中创建多个容器
  10. Leetcode.463 岛屿的周长