class MyApplication : Application() {
companion object{
@SuppressLint("StaticFieldLeak")
lateinit var context: Context
override fun onCreate() {
super.onCreate()
context =applicationContext
现在我们来解释一下上面这块代码
我们让MyApplication继承Application类
然后在companion object中定义一个context变量,重写父类的onCreat()方法,然后调用getApplicationContext方法给context赋值,(代码中为kotlin的语法糖写法),这样我们就获得了静态的context变量,由于将Context设置为静态很容易产生内存泄漏 ,所以这个做法有风险,但是这里获取的Application中的Context,并不会出现像获取Activity或者server中的context一样由于生命周期的原因被回收,它在整个应用程序的生命周期内都不会被回收,所以不存在风险。所以我们需要告诉系统这里没有问题,所以这里添加了 @SuppressLint(“StaticFieldLeak”)注解。
上面的大概弄清楚之后,我们需要再做一件事,这个全局context才能使用,那就是初始化。
在AndroidManifest.xml中修改默认的Application为我们的MyApplication类,这样系统初始化时就会初始化MyApplication而不是Application。
<application
android:name=".MyApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
创建全局context以解决在有些地方获取不到上下文context首先创建一个类 类名叫MyApplication 如下class MyApplication : Application() { companion object{ @SuppressLint("StaticFieldLeak") lateinit var context: Context } override fun onCreate() { super.onC
只需在应用程序的build.gradle添加以下依赖build.gradle
allprojects { repositories { maven { url ' https://jitpack.io ' } }}
dependencies {
implementation ' com.github.cesarferreira:faker:x.x.x '
无人机添加造假者应用程序模块
以下是一些示例,可为您提供使用该库的入门。
.loadRandomImage() imageView.loadRandomImage(
在很多地方都要用到context对象,大多数情况下我们都可以轻松的获取到context对象,但是在一些特殊情况下,逻辑代码逐渐脱离Activity,那么我们就可能为获取context而发愁。
获取全局的context
定制自己的Application
public class MyApplication extends Application{
private stati
改图来源:https://blog.csdn.net/zhanqq2012/article/details/106269491?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0.control&spm=1001.2101.3001.4242
直接说方法:
一、创建MyApplication类
class MyApplication : Application() {.
接触过android的码农都知道context对象可谓是无所不在啊。那么,什么情况才可能创建context实例呢?有三个地方,第一就是创建Application对象(唯一)时、第二就是创建Activity对象时、第三就是创建Service对象时。
虽然以上三个地方创建出来的都是context实例,但是在某些情况下,它们就会有质的差别,稍有不慎就会导致著名的“内存泄漏”问题。在这里就简
简单来说,CoroutineScope是启动协程的作用域,所有协程都需要在作用域中启动,并且作用域内部创建子协程则会自动传播给子协程;
而CoroutineContext则是在协程作用域中执行的线程切换。
1、首先我们来看下Scope作用域的理解,示例代码:
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
fun main() {
runBlocking {
val scope0
回想这么久以来我们所学的内容,你会发现有很多地方都需要用到 Context,弹出 toast 的时侯需要,启动活动的时侯需要,发送广播的时候需要,操作数据库的时侯需要,使用通知的时候需要……。
或许目前你还没有为得不到 Context 而发愁过,因为我们很多的操作都是在活动中进行的,而活动本身就是一个 Context 对象。但是,当应用程序的架构逐渐开始复杂起来的时候,很多的逻辑代码都将脱离 Activity 类,但此时你又恰恰需要使用 Context,也许这个时候你就会感到有些伤脑筋了。
例如,在第1
val intent = Intent(Intent.ACTION_PICK)
intent.type = "image/*"
startActivityForResult(intent, 1)
这将打开系统的相册应用程序,让用户选择一个图片。
在Activity中添加以下方法,以处理用户选择的图片:
```kotlin
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == 1 && resultCode == RESULT_OK && data != null) {
val imageUri = data.data
if (imageUri != null) {
val bitmap = getBitmapFromUri(imageUri)
imageView.setImageBitmap(bitmap)
private fun getBitmapFromUri(uri: Uri): Bitmap? {
val inputStream = contentResolver.openInputStream(uri)
return BitmapFactory.decodeStream(inputStream)
此代码首先检查requestCode和resultCode是否与我们启动Activity时使用的值匹配。如果匹配,则获取用户选择的图片的URI。
然后,我们调用getBitmapFromUri方法,该方法从URI获取输入流,并使用BitmapFactory将其解码为Bitmap对象。最后,我们将该位图设置到ImageView中。
请注意,这种方法可能无法在Android 10中正常工作,因为Android 10中引入了一些更严格的文件访问权限。要在Android 10中使用此方法,请确保在AndroidManifest.xml文件中添加以下权限:
```xml
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
并使用以下代码打开图库:
```kotlin
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT)
intent.type = "image/*"
startActivityForResult(intent, 1)
这将打开系统的文档应用程序,让用户选择一个图片。在处理用户选择的图片时,您需要使用以下方法获取输入流:
```kotlin
private fun getBitmapFromUri(uri: Uri): Bitmap? {
val inputStream = contentResolver.openInputStream(uri)
return BitmapFactory.decodeStream(inputStream)
请注意,Android 10中,您需要在AndroidManifest.xml文件中添加以下权限:
```xml
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
并在应用程序运行时请求这些权限。
以上是使用kotlin编写的安卓代码,用于从相册中选择图片并将其显示在ImageView中,并保证在Android 10中可用。
报错Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK
10354