安卓基础学习总结

安卓学习总结 Android系统四大组件 (1)活动(Activity):是所有Android应用程序的门面,凡是在应用中你看得到的东西,都是放在活动中的。 (2)服务(Service):你无法看到它,但它会一直在后台默默地运行,即使用户退出了应用,服务仍然是可以继续运行的。 (3)广播接收器(Broadcast Receiver):广播接收器允许你的应用接收来自各处的广播消息,比如电话、短信等,当然你的应用同样也可以向外发出广播消息。 (4)内容提供器(Content Provider):为应用程序之间共享数据提供了可能,比如你想要读取系统电话簿中的联系人,就需要通过内容提供器来实现。 Activity Activity四种状态,七个回调方法,三种生存期,四种活动启动模式 运行:当一个活动位于返回栈的栈顶时,这时活动就处于运行状态。

暂停:当一个活动不再处于栈顶位置,但仍然可见时,这时活动就进入了暂停状态。只有在内存极低的情况下,系统才会去考虑回收这种活动。

停止:当一个活动不再处于栈顶位置,并且完全不可见的时候,就进入了停止状态。当其他地方需要内存时,处于停止状态的活动有可能会被系统回收。

销毁:当一个活动从返回栈中移除后就变成了销毁状态。系统会最倾向于回收处千这种状态的活动,从而保证手机的内存充足。 onCreate():在活动第一次被创建的时候调用。在这个方法中完成活动的初始化操作,比如说加载布局、绑定事件等。

onStart():在活动由不可见变为可见的时候调用。

onResume():在活动准备好和用户进行交互的时候调用。此时的活动一定位于返回栈的栈顶,并且处于运行状态。

onPause():在系统准备去启动或者恢复另一个活动的时候调用。执行后仍然可见但不可交互。

onStop():在活动完全不可见的时候调用。执行后不可见。

onDestory():在活动被销毁之前调用,之后活动的状态将变为销毁状态。

onRestart():在活动由停止状态变为运行状态之前调用,也就是活动被重新启动了。

完整生存期:活动在onCreate()方法和onDestroy()方法之间所经历的,就是完整生存期

可见生存期:活动在onStart()方法和onStop()方法之间所经历的,就是可见生存期。

前台生存期。活动在onResume()方法和onPause()方法之间所经历的就是前台生存期。

活动的四种启动方式 standard: 在standard 模式(即默认情况)下,每当启动一个新的活动,它就会在返回栈中入栈,并处于栈顶的位置。对于使用standard 模式的活动,系统不会在乎这个活动是否已经在返回栈中存在,每次启动都会创建该活动的一个新的实例。 singleTop: 在启动活动时如果发现返回栈的栈顶已经是该活动,则认为可以直接使用它,不会再创建新的活动实例。 singleTask: 每次启动该活动时系统首先会在返回栈中检查是否存在该活动的实例,如果发现已经存在则直接使用该实例,并把在这个活动之上的所有活动统统出栈,如果没有发现就会创建一个新的活动实例。 single Instance: 会有一个单独的返回栈来管理这个活动,不管是哪个应用程序来访问这个活动,都 共用的同一个返回栈,也就解决了共享活动实例的问题。 Android四种基本布局 线性布局(LinearLayout): 会将它所包含的控件在线性方向上依次排列 android:orientation:指定vertical是垂直方向排列 ,指定horizontal ,控件就会在水平方向上排列。 android:layout_gravity:指定控件在布局中的对齐方式 android:gravity:用于指定文字在控件中的对齐方式 android: layout_weight:系统会先把LinearLayout下所有控件指定的layout_weight值相加,得到一个总值,然后每个控件所占大小的比例就是用该控件的layout_weight值除以刚才算出的总值。 相对布局(RelativeLayout): 通过相对定位的方式让控件出现在布局的任何位置

android:layout_alignParentLeft:表示让一个控件位于其父控件的左侧 android:layout_alignParentTop:表示让一个控件位于其父控件的顶部 android: layout_alignParentRight:表示让一个控件位于其父控件的右侧 android:layout_alignParentBottom:表示让一个控件位于其父控件的底部 android:layout_centerInParent:表示让一个控件位于其父控件的中间 android:layout_above:表示让一个控件位于另一个控件的上方 android:layout_below:表示让一个控件位于另一个控件的下方 android:layout_toleftOf:表示让一个控件位于另一个控件的左侧 android:layout_toRightOf:表示让一个控件位于另一个控件的右侧 android:layout_alignLeft:表示让一个控件的左边缘和另一个控件的左边缘对齐 android:layout_alignRight:表示让一个控件的右边缘和另一个控件的右边缘对齐 帧布局(FrameLayout): 没有方便的定位方式,所有的控件都会默认摆放在布局的左上角

android:layout_gravity:指定控件在布局中的对齐方式 百分比布局(PercentFrameLayout和PercentRelativeLayout): 允许直接指定控件在布局中所占的百分比 添加依赖“com.android.support:percent:24.2.1"

app:layout_widthPercent:表示确定控件宽度在父控件中所占比例 app:layout_heightPercent:表示确定控件高度在父控件中所占比例 绝对布局(AbsoluteLayout): 表格布局(TableLayout): Fragment四种状态,重要回调方法,生命周期 运行:当一个碎片是可见的,并且它所关联的活动正处千运行状态时,该碎片也处于运行状态。

暂停:当一个活动进入暂停状态时(由于另一个未占满屏幕的活动被添加到了栈顶),与它相关联的可见碎片就会进入到暂停状态。

停止:当一个活动进入停止状态时,与它相关联的碎片就会进入到停止状态,或者通过调用FragmentTransaction 的remove()、replace()方法将碎片从活动中移除,但如果在事务提交之前调用addToBackStack()方法,这时的碎片也会进入到停止状态。总的来说,进入停止状态的碎片对用户来说是完全不可见的,有可能会被系统回收。

销毁:碎片总是依附于活动而存在的,因此当活动被销毁时,与它相关联的碎片就会进入到销毁状态。或者通过调用FragmentTransaction 的remove() 、replace()方法将碎片从活动中移除,但在事务提交之前并没有调用addToBackStack()方法,这时的碎片也会进入到销毁状态。

onAttach():当碎片和活动建立关联的时候调用 onCreateView():为碎片创建视图(加载布局)时调用 onActivityCreated():确保与碎片相关联的活动一定已经创建完毕的时候调用 onDestroyView():当与碎片关联的视图被移除的时候调用 onDetach():当碎片与活动解除关联的时候调用其他

广播接 收器(Broadcast Receiver) 广播包括标准广播和有序广播 按方式分为全局广播和本地广播 本地广播只能够在应用程序的内部进行传递,并且广播接收器也只能接收来自本应用程序发出的广播。 本地广播的优势: 可以明确地知道正在发送的广播不会离开我们的程序,因此不必担心机密数据泄漏。 其他的程序无法将广播发送到我们程序的内部,因此不需要担心会有安全漏洞的隐患。 发送本地广播比发送系统全局广播将会更加高效。 前者是异步操作,后者则是同步操作,后者可以在标签里面添加优先级就可以保证广播的有序发送和接收了。 广播注册也包括两种动态注册和静态注册 注册广播的方式一般有两种,在代码中注册 和在AndroidManifest.xml中注册,其中前者也被称为动态注册,后者也被称为静态注册。 动态注册只需要新建一个类,让它继承自 BroadcastReceiver ,并重写父类的onReceive() 方法就行了。最后要取消注册,即在onDestroy()方法中来进行取消。但有一个弊端就是只能在程序启动的时候才能接收到广播。 静态注册则解决了这个问题,静态注册只需要在AndoridManifest.xml文件中写入标签并在 标签里添加了相应的action。另外,监听系统开机广播 也是需要声明权限的,可以看到,我们使用 标签又加入了一 条android.permission.RECEIVE_BOOT_COMPLETED 权限。 内容提供器(Content Provider) 概念和优点: 主要用于在不同的应用程序之间实现数据共享的功能,它提供 了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能保证被访数据的安全 性。目前,使用内容提供器是Android实现跨程序共享数据的标准方式。 不同于文件存储和SharedPreferences存储中的两种全局可读写操作模式,内容提供器可以选择只 对哪一部分数据进行共享,从而保证我们程序中的隐私数据不会有泄漏的风险。 两种用法: 使用现有的内容提供器来读取和操作相应程序中的数据。 借助该类ContentResolver。通过Context中的getContentResolver() 方法获取到该类的实例。 ContentResolver中提供了一系列的方法用于对数据进行CRUD操作,区别是接收的参数是URi(内容URI) 创建自己的内容提供器给我们的程序的数据提供外部访问接口。 新建一个类去继承ContentProvider,重新该类下面的六个方法。

了解活动和内容提供者是如何联系的 前者编写一个页面,添加一些按钮等功能,当点击按钮之后会通过一个uri,通过使用 ContentProvider 类里面的getContentResolver 方法来传递和操作对应的数据内容,同时内容提供者是实现了ContentProvider 类,同时继承了里面的六个方法,可以根据对应的uri来进行区分操作对应的数据,可以保证将数据共享出去。

服务(Service) 是Android中实现程序后台运行的解决方案,它非常适合去执行那些不需要和用 户交互而且还要求长期运行的任务。 解析异步消息处理机制 01. Message Message是在线程之间传递的消息,它可以在内部携带少量的信息,用于在不同线程之间交 换数据。 02. Handler Handler顾名思义也就是处理者的意思,它主要是用于发送和处理消息的。发送消息一般是 使用Handler的sendMessage() 方法,而发出的消息经过一系列地辗转处理后,最终会传 递到Handler的handleMessage() 方法中。 03. MessageQueue MessageQueue是消息队列的意思,它主要用于存放所有通过Handler发送的消息。这部分消 息会一直存在于消息队列中,等待被处理。每个线程中只会有一个MessageQueue 对象。 04. Looper Looper是每个线程中的MessageQueue的管家,调用Looper的loop() 方法后,就会进入到一 个无限循环当中,然后每当发现MessageQueue中存在一条消息,就会将它取出,并传递到 Handler的handleMessage() 方法中。每个线程中也只会有一个Looper 对象。 首先需要在主线程当中创建一个Handler 对象,并重写 handleMessage() 方法。然后当子线程中需要进行UI操作时,就创建一个Message 对象,并 通过Handler将这条消息发送出去。之后这条消息会被添加到MessageQueue的队列中等待被处 理,而Looper则会一直尝试从MessageQueue中取出待处理消息,最后分发回Handler的 handleMessage() 方法中。由于Handler是在主线程中创建的,所以此时handleMessage() 方法中的代码也会在主线程中运行。

服务的生命周期如下: onCreate() 、onStartCommand() 和onDestroy() 这3 个方 法,。 其中onCreate() 方法会在服务创建的时候调用 onStartCommand() 方法会在每次服务启动的时候调用 onDestroy() 方法会在服务销 毁的时候调用。 一般的服务是后台服务,创建前台服务的方法也很简单 Notification notification = new NotificationCompat.Builder(this) .setContentTitle("This is content title") .setContentText("This is content text") .setWhen(System.currentTimeMillis()) .setSmallIcon(R.mipmap.ic_launcher) .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher)) .setContentIntent(pi) .build(); startForeground(1, notification);

安卓的网络技术的使用 主要包括两种自带的网络请求: :HttpURLConnection和HttpClient ( 在Android 6.0系统之后已废除) 开源项目 OkHttp 操作很方便,更简单易用。 解析XML格式和json数据 的方式 学习安卓的服务service相关概念和实战 服务(Service)是Android中实现程序后台运行的解决方案,它非常适合去执行那些不需要和用 户交互而且还要求长期运行的任务。

项目总结 PagerAdapter 一个用于 ViewPager 的自定义 PagerAdapter,主要作用是实现 无限循环轮播 的效果。 这个适配器适用于简单的无限轮播场景,比如Banner广告、引导页,优点是代码简洁,直接复用现有视图。但对于复杂场景,建议考虑更优化的方案,比如RecyclerView 或第三方库如 ViewPager2 ImageView 是用于在界面上展示图片的一个控件,它可以让我们的程序界面变得更加丰富多彩。BaseAdapter 是 Android 中一个 抽象基类,用于为 ListView、GridView、Spinner 等列表型控件提供数据适配功能。它是所有 Adapter 的父类,定义了 Adapter 的核心行为规范。 Intent数据回传 由于在一个活动中有可能调用startActivityForResult()方法去启动很多不同的活动,每一个活动返回的数据都会回调到onActivityResult()这个方法中,因此我们首先要做的就是通过检查requestCode的值来判断数据来源。确定数据是从SecondActivity返回的之后,我们再通过resultCode的值来判断处理结果是否成功。最后从data中取值并打印出来,这样就完成了向上一个活动返回数据的工作。 onActivityResult()方法带有3个参数: 第一个参数requestCode, 即我们在启动活动时传入的请求码。 第二个参数resultCode, 即我们在返回数据时传入的处理结果。 第三个参数data, 即携带着返回数据的Intent。

bug修复 天气项目成功解决所有问题,目前可以正常启动 前期主要卡顿的两个点 1,LitePal依赖不能成功拉取下来,后续直接通过jar包的方式来拉取依赖 2,省份和城市不能正确显示,主要的原因是安卓设备没有联网导致的网络不通,不能正确响应数据 3,另外就是点击天气不能正确回显,发现问题主要是网络响应的数据返回错误。 每次选择城市进行天气的选择时候,都会走缓存导致主页的城市都是缓存的,以至于出现bug 寻找了两种思路 1.每次设置缓存的时候设置缓存时间,查询的时候会判断缓存是否过期,如果过期重新从网络查询。 2,直接根据 instanceof 关键字可以用来判断一个对象是否属于某个 类的实例 ,如果还是主活动的实例则直接按照原本逻辑,否则重新查询当地天气

0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
下载 APP