Android Studio 也提供了很方便的工具。...示例如下: public void showToast(Activity activity) { if (activity == null) { return...Android 提供了相关的注解以及最基础的检查来协助开发者,示例如下: public void showToast(@NonNull Activity activity) {...let { doSomething(it) } 四、实践中碰到的问题 从 Java 的空处理转到 Kotlin 的空处理,我们可能会下意识去寻找对标 Java 的判空写法:...两个代码块的对象不同 以 let 为例,在 let 代码块里可以用 it 指代该对象(其他高阶函数可能用 this,类似的),那么我们在写如下代码时可能会顺手这样写: activity {
例如,当 Activity 暂停时,Activity 的所有片段也会暂停;当 Activity 被销毁时,所有片段也会被销毁。...不过,当 Activity 正在运行(处于已恢复生命周期状态)时,可以独立操纵每个片段,如添加或移除片段。...当执行此类片段事务时,也可将其添加到由 Activity 管理的返回栈 — Activity 中的每个返回栈条目都是一条已发生片段事务的记录。借助返回栈,用户可以通过按返回按钮撤消片段事务(后退)。...实际上,如果要将现有 Android 应用转换为使用片段,可能只需将代码从 Activity 的回调方法移入片段相应的回调方法中。...创建此 Activity 布局时,系统会将布局中指定的每个片段实例化,并为每个片段调用 onCreateView() 方法,以检索每个片段的布局。
- 任务 任务是用户在执行某项工作时与之互动的一系列 Activity 的集合。 - 片段 Fragment 表示 FragmentActivity 中的行为或界面的一部分。...您可以在一个 Activity 中组合多个片段,从而构建多窗格界面,并在多个 Activity 中重复使用某个片段。...您可以将片段视为 Activity 的模块化组成部分,它具有自己的生命周期,能接收自己的输入事件,并且您可以在 Activity 运行时添加或移除片段(这有点像可以在不同 Activity 中重复使用的...与 Activity 生命周期协调一致 片段所在 Activity 的生命周期会直接影响片段的生命周期,其表现为,Activity 的每次生命周期回调都会引发每个片段的类似回调。...o 与 Activity 通信 片段可通过 getActivity() 访问 FragmentActivity 实例,并轻松执行在 Activity 布局中查找视图等任务 View listView
从 Android 3.0(API 级别 11)开始,采用 Android 技术的设备不必再提供一个专用“菜单”按钮。...系统将首先显示 Activity 的项目,随后按每个片段添加到 Activity 中的顺序显示各片段的项目。...处理点击事件 用户从选项菜单中选择项目(包括应用栏中的操作项目)时,系统将调用 Activity 的 onOptionsItemSelected() 方法。 此方法将传递所选的 MenuItem。...如果 Activity 包括片段,则系统将依次为 Activity 和每个片段(按照每个片段的添加顺序)调用 onOptionsItemSelected(),直到有一个返回结果为 true 或所有片段均调用完毕为止...如果 Activity 包括片段,则 Activity 将先收到此回调。
例如:新闻应用可以使用一个片段在左侧显示文章列表,使用另一个片段在右侧显示文章—两个片段并排显示在一个 Activity 中,每个片段都具有自己的一套生命周期回调方法,并各自处理自己的用户输入事件。...也就是说,由于每个片段都会通过各自的生命周期回调来定义其自己的布局和行为,您可以将一个片段加入多个 Activity,因此,您应该采用可复用式设计,避免直接从某个片段直接操纵另一个片段。...例如,在手机上,如果不能在同一 Activity 内储存多个片段,可能必须利用单独片段来实现单窗格 UI。...不过,在手机尺寸的屏幕上,没有足以储存两个片段的空间,因此Activity A 只包括用于显示文章列表的片段,当用户选择文章时,它会启动Activity B,其中包括用于阅读文章的第二个片段。...** * 重写onStart()方法, * 因为从fragment的生命周期可以知道当Activity的onCreate(Bundle savedInstanceState)中
与仅使用上述 Activity 相比,无论您在构建何种 Activity,片段都可为应用提供一个更加灵活的体系结构。...7CimageView2/2/w/1240) 读取首选项 默认情况下,应用的所有首选项均保存到一个可通过调用静态方法 PreferenceManager.getDefaultSharedPreferences() 从应用内的任何位置访问的文件中...为了避免用户禁止您的应用从后台访问数据,您应该有效地使用数据连接,并允许用户通过应用设置优化应用的数据使用。...因此,当用户从系统的“设置”应用检查应用所使用的数据量时,可以使用“查看应用设置”按钮启动 PreferenceActivity,这样,用户就能够优化应用使用的数据量。.... } 保存设置的值 初始化当前值 提供默认值 保存和恢复首选项的状态 正如布局中的 View 一样,在重启 Activity 或片段时(例如,用户旋转屏幕),Preference 子类也负责保存并恢复其状态
Android-App-Bundle-Delivery 从 2021 年下半年开始,Google 要求新应用需要使用 Android App Bundle 才能在 Google Play 中发布。...Android App Bundle 收集和检查依赖冲突的就是 runtimeClasspath,可参看 FeatureSplitTransitiveDepsWriterTask.kt 代码片段:...的资源无需添加 base 的包名就可直接访问。...交叉引用报 NPE 编译时不可访问的资源在运行时是可访问的,id 不一致导致错误。 资源 id 错乱容易理解,举例说明交叉引用报 NPE。...NPE B 代码 NPE 正常 NPE base 代码 NPE NPE 正常 这2类运行时问题我们通过替代 aapt2 解决: 固定 base 资源 id 由于资源是分区的,动态模块不论是不是缓存都不会出现错乱
后台限制 Android P新增后台限制功能,若应用出现 Android Vitals 内所描述的不良行为,系统将提醒用户限制该应用访问设备资源。 3....低耗电模式 当用户一段时间没有使用设备时,设备将进入低耗电模式,所有应用都将受到影响。 Android P 并未针对低电耗模式作出任何更改。...极少 (Rare): 应用偶尔被使用 5....如果应用没有 Launcher Activity,它可能永远都不会切换至活跃分组。开发者可能需要重新设计应用并添加此类activity。...后台限制 当系统监测到应用消耗过多资源时,系统会通知并询问用户是否需要限制该应用的后台活动。
Android: 要在Flutter中切换屏幕,我们可以访问路由以绘制新的Widget。 管理多个屏幕有两个核心概念和类:Route 和 Navigator。...> 以上代码片段的完整部分可以在课程源码中查找。...然后,在MainActivity中,您可以处理intent,一旦我们从intent中获得共享文本数据,我们就会持有它,直到Flutter在完成准备就绪时请求它。 ......最后,在Flutter中,您可以在渲染Flutter视图时请求数据。...参考 Flutter从入门到进阶实战携程网App
<activity android:name=".app.Forwarding" android:label="@string/activity_forward ding"> 两个活动的名称分别为...点击“Go”按钮从 Forward 跳转到 ForwardTarget,这个内容在 Java 源文件 Forward.java 的以下片段中处理: public void onClick(View v)...6.4.2.带有返回值的跳转 在某些时候,从跳转的对象返回时,跳转源头需要得到其返回的结果,这样两个屏幕才可实现一些交互。...> ReceiveResult 程序的运行结果如图所示: ?
Fragment 概念 Android从3.0之后引入了Fragment,可以把它理解为页面的一个片段,比如一个html网页就包含一个header头部片段,以及一个body身体片段。...设计Fragment的目的是让页面布局更加灵活,不但可以随意组装和拼接各个片段,还可以只更新某个片段实现页面局部更新的功能(这个类似网页的ajax技术)。...导致状态丢失的情况有很多,其中一种是早期的Android可能在onStop之前就会结束Activity,后来从3.0开始只能在onStop之后才能结束Activity,这样早期Android如果在omPause...Fragment的生命周期 Fragment的生命周期参照Activity(参见《Android开发笔记(三十九)Activity的生命周期》),同时多出了几个方法,具体说明如下: onAttach...onActivityCreated : 在Activity页面创建完毕之后调用,这意味着onCreateView有可能在主页面尚未创建完毕时就完成了,比如说在主页面的onCreate方法中加入Fragment
资料编辑功能的实现思路:在用户登录时将相关资料从服务器传到客户端保存一份,通过保存的Uid等实现相应的信息发布及资料编辑等该用户的相关操作。...在访问一个不存在key值这个过程中,并无任何异常抛出。 ?...登陆Activity中的代码片段 //获取SharedPreferences对象 Context ctx = LoginActivity.this; SharedPreferences...参考资料 Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (三) —— SharePreferences Android应用开发...SharedPreferences存储数据的使用方法 SharedPreferences-百度百科 求解:Activity.MODE_PRIVATE 和Activity.MODE_APPEND的区别
如果您不理解为何需要 Loader API 来执行这个看似无关紧要的操作,请首先考虑没有加载器时可能会遇到的一些问题: 如果直接在 Activity 或片段中获取数据,由于通过界面线程执行查询的速度可能较慢...如果从另一个线程获取数据(方法可能是使用 AsyncTask),则您需负责通过各种 Activity或片段生命周期事件(例如 onDestroy() 和配置变更)来管理线程和界面线程。...如要获取 LoaderManager,请从 Activity 或片段调用 getSupportLoaderManager()。...onLoaderReset(Loader) - 重置之前创建的加载器时调用(当您调用 destroyLoader(int) 时),或由于系统销毁 Activity 或片段而使其数据不可用时调用。...此接口一般由您的 Activity 或片段实现,并在您调用 initLoader() 或 restartLoader() 时进行注册。 --- Loader Loader 类执行数据的加载。
一、使用内部类作为事件监听器 和上面的匿名内部类不同,使用内部类可以在当前类中复用该监听器类;因为监听器类是外部类的内部类,所以可以自由访问外部类的所有界面组件,这也是内部类的两个优势。...继续使用WidgetSample工程,在app/main/res/layout/目录下创建event_inner_class_layout.xml文件,在其中填充如下代码片段: <?...外部类形式的事件监听器不能自由访问创建GUI界面的类中的组件,编程不够简洁。...继续使用WidgetSample工程,在app/main/res/layout/目录下创建event_activity_class_layout.xml文件,在其中填充如下代码片段: <?...Toast.LENGTH_SHORT).show(); } } 上面程序中的粗体字代码定义了一个clickHandler(View source)方法,当程序中的按钮被单击时,
如果您不理解为何需要 Loader API 来执行这个看似无关紧要的操作,请首先考虑没有加载器时可能会遇到的一些问题: 如果直接在 Activity 或片段中获取数据,由于通过界面线程执行查询的速度可能较慢...如果从另一个线程获取数据(方法可能是使用 AsyncTask),则您需负责通过各种 Activity或片段生命周期事件(例如 onDestroy() 和配置变更)来管理线程和界面线程。...如要获取 LoaderManager,请从 Activity 或片段调用 getSupportLoaderManager()。...onLoaderReset(Loader) - 重置之前创建的加载器时调用(当您调用 destroyLoader(int) 时),或由于系统销毁 Activity 或片段而使其数据不可用时调用。...此接口一般由您的 Activity 或片段实现,并在您调用 initLoader() 或 restartLoader() 时进行注册。 ---- Loader Loader 类执行数据的加载。
标题图 女孩:又周末了哦~ 男孩:那么今日来开个交流会,我们也学一学人家高大尚的大会,自己开一个,广州站,Android开发攻城狮交流会~ 1.Fragment概要: Android从3.0开始引入了Fragment...): 表示活动已被创建完成了,这里是activity创建成功; onStart(): 片段对用户可见; onResume(): 片段与用户开始交互; onPause(): 片段与用户不再交互;...onStop(): 片段不再对用户可见; onDestroyView(): 销毁与其View相关资源; onDestroy(): 销毁一切片段; onDetach(): 片段与其活动不再相关联。...里的代码 通常用这个来展示,但是代码过长,我们来简化一下 我们先来添加一个setMain() 方法,来显示打开界面时,显示的初始页面 实现点击底部导航栏来切换响应的fragment,我们在onClick...男孩:px在Android中为最小元素单元,px为像素,pt是磅数的意思,在Android通常作为字体的单位来用~ 女孩:那dp和sp呢?
搭建基于 MVVM 的项目框架 --- 前言 从谷歌在 2017 年的 Google IO 宣布 Kotlin 成为 Android 开发的官方语言开始,已经过去将近 2 年了,Kotlin 越来越被开发者所关注...虽然批评的声音也不少,说 Kotlin 只不过是语法糖的,拿来跟 Java 8/9/10 对比表示不过如此的,但是针对 Android 开发而言,这门语言是有生产力的,具体我在项目中可能会插入一些个人感受...浅谈 MVP 和 MVVM MVP 公司大概 1 年半前开始改为用 MVP 模式来开发代码,相比曾经上千行的 Activity 代码,实在进步了不少,V (View) 和 P (Presenter) 之间通过接口来互相访问与操作...随着生命周期的变化,可能出现 NPE,或者内存泄露,这确实也是我们上一个项目上线测试后出现的最多 Bug,添加了不少判空条件,更加加深了我去尝试其它设计模式的愿望。...默认只在 Activity 和 Fragment 在 started 或 resumed 2 种状态时通知 UI 更新数据 3.
Intent 的最主要功能是用来启动 Activity,因此我们以这个场景为例,从源码中分析一下 Intent 的具体实现。...启动 Activity 的常规代码片段如下: Intent intent = new Intent(context, SomeActivity.class); startActivity(intent)...使用 FragmentActivity 可以在一个 Activity 中组合一个或者多个片段,方便进行代码复用,片段的生命周期受到宿主 Activity 的影响。...可以看到 Provider 主要实现了类似数据库的增删改查接口,从客户端来看,查询过程也和查询传统数据库类似,例如,下面是查询系统短信的代码片段: Cursor cursor = getContentResolver...由于 Webview 或者说 JS 引擎的沙箱特性,网页中的 Javascript 代码本身无法执行许多原生应用才能执行的操作,比如无法从 Javascript 中发送广播,无法访问应用文件等。
解析为MainActivity: Android app link Android App Links 是一种特殊类型的深层链接...如果用户不希望应用程序成为默认处理程序,他们可以从设备的系统设置中覆盖此行为。...以下 XML 片段显示了清单中用于应用程序链接的intent-filters的示例,其中https://example.comURI 解析为MainActivity: <activity android...adPreviewUrl=https://google.com" 参考: :【抢Android/iOS】不安全的深层链接导致敏感信息 :破解 Android :当不等于时,另一个 WebView
领取专属 10元无门槛券
手把手带您无忧上云