![](https://img-blog.csdnimg.cn/20190927151043371.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Android
文章平均质量分 94
Android开发的学习情况
所使用的开发环境为Android Studio
jemo也怕检查
这个作者很懒,什么都没留下…
展开
-
探究Jetpack(三)之ROOM
ORM(Object Relational Mapping)也叫对象关系映射。简单来讲,Kotlin使用的编程语言是面向对象语言,而使用的数据库则是关系型数据库,将面向对象的语言和面向关系的数据库之间建立一种映射关系,这就是ORM了ORM框架赋予了一个强大的功能,就是可以用面向对象的思维来和数据库进行交互,绝大多数情况下不用再和SQL语句打交道了,同时也不用担心操作数据库的逻辑会让项目的整体代码变得混乱。原创 2023-06-09 17:38:27 · 1201 阅读 · 0 评论 -
探究Jetpack(二)之LiveData
LiveData是Jetpack提供的一种响应式编程组件,它可以包含任何类型的数据,并在数据发生变化的时候通知给观察者LiveData特别适合与ViewModel结合在一起使用,虽然它也可以单独用在别的地方,但是在绝大多数情况下,它是使用在ViewModel当中的。原创 2023-06-09 17:39:48 · 889 阅读 · 0 评论 -
探究Jetpack(四)之 WorkManager
而WorkManager只是一个处理定时任务的工具,它可以保证即使在应用退出甚至手机重启的情况下,之前注册的任务仍然将会得到执行,因此WorkManager很适合用于执行一些定期和服务器进行交互的任务,比如周期性地同步数据,等等。另外,使用WorkManager注册的周期性任务不能保证一定会准时执行,这并不是bug,而是系统为了减少电量消耗,可能会将触发时间临近的几个任务放在一起执行,这样可以大幅度地减少CPU被唤醒的次数,从而有效延长电池的使用时间。后台任务的写法非常固定,也很好理解。原创 2023-06-09 17:39:16 · 866 阅读 · 0 评论 -
探究Jetpack(一)之ViewModel和Lifecycles
Jetpack是一个开发组件工具集,它的主要目的是帮助我们编写出更加简洁的代码,并简化开发过程。Jetpack中的组件有一个特点,它们大部分不依赖于任何Android系统版本,这意味着这些组件通常是定义在AndroidX库当中的,并且拥有非常好的向下兼容性Android studio新建一个JetpackTest工程,然后开始了解Jetpack。原创 2023-06-05 20:17:11 · 218 阅读 · 0 评论 -
Android界面设计:Material Design之滑动菜单
所谓的滑动菜单,就是将一些菜单选项隐藏起来,而不是放置在主屏幕上,然后可以通过滑动的方式将菜单显示出来。这种方式既节省了屏幕空间,又实现了非常好的动画效果,是Material Design中推荐的做法。原创 2023-06-05 16:39:52 · 392 阅读 · 0 评论 -
Android界面设计:Material Design之悬浮按钮和可交互提示
在官方给出的示例中,最简单且最具代表性的立面设计就是悬浮按钮了,这种按钮不属于主界面平面的一部分,而是位于另外一个维度的,因此就会给人一种悬浮的感觉。打个比方,如果在执行删除操作的时候只弹出一个Toast提示,那么用户要是误删了某个重要数据的话,肯定会十分抓狂吧,但是如果增加一个Undo按钮,就相当于给用户提供了一种弥补措施,从而大大降低了事故发生的概率,提升了用户体验。可以看到,Snackbar从屏幕底部出现了,上面有我们设置的提示文字,还有一个“Undo”按钮,按钮是可以点击的。原创 2023-06-05 16:38:06 · 386 阅读 · 0 评论 -
Android界面设计:Material Design之卡片式布局
这是由于RecyclerView和Toolbar都是放置在CoordinatorLayout中的,而前面已经说过,CoordinatorLayout就是一个加强版的FrameLayout,那么FrameLayout中的所有控件在不进行明确定位的情况下,默认都会摆放在布局的左上角,从而产生了遮挡的现象。水果图片的长宽比例可能会不一致,为了让所有的图片都能填充满整个ImageView,这里使用了centerCrop模式,它可以让图片保持原有比例填充满ImageView,并将超出屏幕的部分裁剪掉。原创 2023-06-05 16:37:54 · 1402 阅读 · 0 评论 -
Android界面设计:Material Design之下拉刷新
沉睡结束之后,这里使用了runOnUiThread()方法将线程切换回主线程,然后调用initFruits()方法重新生成数据,接着再调用FruitAdapter的notifyDataSetChanged()方法通知数据发生了变化,最后调用SwipeRefreshLayout的setRefreshing()方法并传入false,表示刷新事件结束,并隐藏刷新进度条。运行程序,在屏幕的主界面向下拖动,会有一个下拉刷新的进度条出现,松手后就会自动进行刷新了。修改activity_main.xml中的代码。原创 2023-06-05 16:39:05 · 346 阅读 · 0 评论 -
Android开发之使用网络技术解析XML和JSON数据
当调用了AppService的getAppData()方法时,会返回一个Call<List<App>>对象,这时再调用一下它的enqueue()方法,Retrofit就会根据注解中配置的服务器接口地址去进行网络请求了,服务器响应的数据会回调到enqueue()方法中传入的Callback实现里面。在Callback的onResponse()方法中,调用response.body()方法将会得到Retrofit解析后的对象,也就是List<App>类型的数据,最后遍历List,将其中的数据打印出来即可。原创 2023-05-29 21:12:18 · 433 阅读 · 0 评论 -
Android开发之使用网络技术
在showResponse()方法里,由于Android是不允许在子线程中进行UI操作,所以使用一个对异步消息处理机制进行封装的runOnUiThread()方法,然后在这个方法的Lambda表达式中进行操作,将返回的数据显示到界面上。注意,子线程中是无法通过return语句返回数据的,因此将服务器响应的数据传入了HttpCallbackListener的onFinish()方法中,如果出现了异常,就将异常原因传入onError()方法中。在使用OkHttp之前,需要先在项目中添加OkHttp库的依赖。原创 2023-05-29 20:07:53 · 413 阅读 · 0 评论 -
Android的控件与布局
新建Activity继承LinearLayout,这样就可以成为自定义的标题栏控件init {在主构造函数中声明了Context和AttributeSet这两个参数,在布局中引入TitleLayout控件时就会调用这个构造函数。在init结构体中需要对标题栏布局进行动态加载,需要借助LayoutInflflater来实现通过LayoutInflflater的from()方法可以构建出一个LayoutInflater对象,然后调用inflate()方法就可以动态加载一个布局文件。原创 2023-05-25 22:15:30 · 236 阅读 · 0 评论 -
Android四大主件之Service
在Android studio项目中定义一个个Service。新建一个ServiceTest项目,然后右击com.example.servicetest→New→Service→ServiceExported属性表示是否将这个Service暴露给外部其他程序访问Enabled属性表示是否启用这个Service此时已经创建一个空的Service类,在类中有一个onBind()方法是Service中唯一的抽象方法,必须实现在Service中重写下面的方法,使Service可以出来事情。原创 2023-05-27 13:38:22 · 139 阅读 · 0 评论 -
Android多线程编程
progressDialog . show() // 显示进度对话框 } override fun doInBackground(vararg params : Unit?) = try {val downloadPercent = doDownload() // 这是一个虚构的方法 publishProgress(downloadPercent) if(downloadPercent >= 100) {) {原创 2023-05-26 22:32:34 · 160 阅读 · 0 评论 -
Android使用手机的多媒体(代码解释)
发出一条通知后,手机最上方的状态栏中会显示一个通知的图标,下拉状态栏后可以看到通知的详细内容。这里仍然是调用的setStyle()方法,这次在参数中创建了一个 NotificationCompat.BigPictureStyle对象,这个对象就是用于设置大图片的,然后调用它的bigPicture()方法并将图片传入。首先在onCreate()方法中调用了Uri.parse()方法,将raw目录下的video.mp4文件解析成了一个Uri对象,这里使用的写法是Android要求的固定写法。原创 2023-05-26 14:42:46 · 318 阅读 · 0 评论 -
Activity和Fragment
在SecondActivity中启动FirstActivity时,会发现返回栈中已经存在一个FirstActivity的实例,并且是在SecondActivity的下面,于是SecondActivity会从返回栈中出栈,而FirstActivity重新成为了栈顶Activity,因此FirstActivity的onRestart()方法和SecondActivity的onDestroy()方法会得到执行。系统最不愿意回收的就是处于运行状态的Activity,因为这会带来非常差的用户体验。原创 2023-05-25 21:48:36 · 993 阅读 · 0 评论 -
Kotlin
和绝大多数主流编程语言不同的是,Kotlin却极度弱化了静态方法这个概念,想要在Kotlin中定义一个静态方法不是一件容易的事那么Kotlin为什么要这样设计呢?因为Kotlin提供了比静态方法更好用的语法特性,那就是单例类。虽然这里的doAction()方法并不是静态方法,但是我们仍然可以使用Util.doAction()的方式来调用,这就是单例类所带来的便利性。原创 2023-05-25 21:41:43 · 66 阅读 · 0 评论