相关文章推荐
心软的热带鱼  ·  AccessTokenProviderCha ...·  6 月前    · 
深情的西装  ·  SQL基础篇 - 知乎·  1 年前    · 

创建全局context以解决在有些地方获取不到上下文context

首先创建一个类 类名叫MyApplication 如下

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
报错Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK HD6870: 感谢楼主,该方法对安卓4.x和5.x的机子有用!表情包 Android架构模式之 MVVM模式 Lansonli: 博主原创不容易啊,过来支持一下哈,最近在更新大数据系列文章,有兴趣可以关注看看~ Android架构模式之 MVVM模式 盼盼编程: