Kotlin与Android的数据持久化操作


《Kotlin从0基础到精通Android开发》学习笔记(与Java对比):

学习目标:
关于Kotlin与Android的数据持久化操作,我们需要

  • 学会利用工具类Preference进行数据共享参数的键值对管理工作、并掌握委托属性、lazy修饰符、with函数的基本用法。
  • 学会使用Kotlin的ManagedSQLiteOpenHelper工具进行数据库操作编码。
  • 学会通过Kotlin的文件I/O函数库进行文件相关处理,包括文本文件读写、图片文件读写、文件目录遍历等。
  • 学会按照Koltin的编码风格实现Application的单例化,并通过单例Application操作全局变量。

	对于Android中的4种主要存储方式的用法,包括共享参数SharedPreference、数据库SQLite、文件I/O操作、App的全局变量。

1.使用共享参数SharedPreferences:

共享参数是Android系统最简单的数据持久化存储方式。不是因为它存储结构简单,而是因为开发编码简单。即使通过Java编写共享参数读写的代码,也不过寥寥数行。那么Kotlin究竟采用了什么技术手段,优化了java的不足呢?

共享参数SharedPreferences是Android最简单的数据存储方式,常用于存储“key-value”键值对数据。在使用共享参数之前,首先要调用getSharedPreferences方法声明文件名与操作模式。

SharedPreferences sps = getSharedPreferences("share",Context.MODE_PRIVATE);
// 该方法的第一个参数是文件名,参数share表示当前的共享参数文件是share.xml
//第2个参数是操作模式,一般填MODE_PRIVATE表示私有模式

使用共享参数要存储数据,要借助Editor类。

SharedPreferences.Editor editor=sps.edit();
editor.putString("name","尹磊");
editor.putInt("age",20);
editor.putBoolean("married",false);
editor.commit();

使用共享参数读取数据直接调用其对象的get()方法即可获取数据,
注意get()方法的第二个参数表示默认值。

String name=sps.getString("name","");
int age=sps.getInt("age",0);
boolean married=sps.getBoolean("married",false);

可以看出,共享参数的存取操作有些繁琐。因此实际开发中常将共享参数的相关操作提取到一个工具类,在新的工具类里面封装SharedPreferences的常用操作,下面便是一个共享参数工具类的Java代码例子:

public class SharedUtil{private static SharedUtil mUtil;private static SharedPreferences mShared;public static SharedUtil getInstance(Context context){if(mUtil == null){mUtil=new SharedUtil();}mShared = context.getSharedPreferences("share",Context.MODE_PRIVATE);return mUtil;}public void writeShared(String key,String value){SharedPreferfences.Editor editor =mShared.edit();editor.putString(key,value);editor.commit();}public String readShared(String key,String defaultValue){return mShared.getString(key,defaultVlaue);}
}//使用工具类:
//调用工具类写入共享参数
SharedUtil.getInstance(this).writeShared("name",“尹磊”);
//调用工具类读取共享参数
String name =SharedUtil.getInstance(this).readShared("name","");

从上面的代码可以看出,其他数据类型的数据读写还没有写,如果外部需要先读取某个字段的数值,等处理完了再写回共享参数,那么使用该工具类也要2行代码。

以下是Kotlin封装共享参数的工具代码:

class Preference<T>(val context: Context,val name: String,val default: T):ReadWriteProperty<Any?,T>{//通过属性代理初始化共享参数对象val prefs: SharedPreferences by lazy{ context.getSharedPreferences("default",Context.MODE_PRIVATE)}//接管属性值的获取行为override fun getValue(thisRef: Any?, property: KProperty<*>): T {return findPrefence(name,default)}//利用with函数定义临时的命名空间private fun findPrefence(name: String, default: T): T = with(prefs){val res: Any =when(default){is Long -> getLong(name,default);is String -> getString(name,default);is Int -> getInt(name,default)is Boolean -> getBoolean(name,default)else ->   throw IllegalArgumentException("This type can be saved into Preferences")}return res as T}//接管属性值的修改行为override fun setValue(thisRef: Any?, property: KProperty<*>, value: T) {putPreference(name,value)}private fun putPreference(name: String, value: T)= with(prefs.edit()) {//putInt、putString方法返回Editor对象when(value){is Long -> putLong(name,value)is String -> putString(name,value)is Int -> putInt(name,value)is Boolean -> putBoolean(name,value)else -> throw IllegalArgumentException("This type can be saved into Preference")}.apply()//commit()方法和apply()方法都表示提交修改}
}//声明字符串的委托属性
private var name: String by Preference(this,"name","")
//声明整型数类型的委托属性
private var age: Int by Preference(this,"age",0)

上述代码的运行结果和Java的运行结果是一致的。

上述涉及到的知识点补充说明:
这个Preference运用了:

  1. 模板类
    因为共享参数允许保存的数据类型包括整形、浮点型、字符串等,所有将Preference定义成模板类,具体的参数类型在调用的时候再指定。
    除了代表模板类泛型的T,该类还有与之相似的Any和*。
    T、Any、* 三者之间的区别:
    1):T是抽象的泛型,再模板类中用来占位子,外部再调用模板类时才能确定T的具体类型。
    2):Any是Kotlin的基本类型,所有kotlin类都从Any派生而来,相当于Java里面的Object。
    3):星号* 表示一个不确定的类型,同样也是在外部调用时才能确定。但T出现在模板类的定义中,而与模板类无关,它出现在单个函数帝国一的参数列表中,因此相当于Java里面的问号?

  2. 委托属性/属性代理
    注意到外部利用Preference声明参数字段的时候,后面跟着表达式“by Preference(…)”,这个by表示代理的动作。所谓的属性代理,就是说该属性的类型不变,但是属性的读写行为被后面的类接管了。

接管属性的读写行为的必要性:
举例,交电费,市民需要每个月都交电费,每个月自己跑去营业厅交钱很麻烦,后来支持在网上自主缴费,但是需要用户主动上网缴费,可能出现用户忘记缴费。所以银行推行“委托代扣”的业务,用户只要跟银行签约并指定委托扣费的电力账户,那么每个月指定时间,银行会自动从用户银行卡扣费并缴纳给指定的电力账户,免去了用户的人工操作。
委托缴费场景对应到共享参数这里,开发者的人工操作是:手工的编码从SharedPreference类读取数据和保存数据。而自动操作指的是给出一个月约定:代理的属性自动通过模板类“Preference<T>”完成数据的读取和保存,也就是说,Preference<T>接管了这希望属性的读写行为,接管后的操作即为模板类的getValue和setValue方法,因此,属性被接管的行为叫做属性代理,而被代理的属性称作委托属性。

  1. lazy修饰符
    模板类Preference<T>声明了一个共享参数的 prefs对象,其中用到了关键字lazy,lazy的中文意思是“懒惰”,表示只在该属性第一次使用时执行初始化。联想到kotlin还有类似的关键字叫lateinit,意思是延迟初始化。
    Kotlin变量的3种初始化操作:
    1):声明时赋值:这是常见的变量初始化,在声明某个变量时,立即在后面通过等号"=“给它赋予具体的值。
    2):通过关键字lateinit延迟初始化:变量声明时没有马上赋值,但该变量仍是个非空变量,何时初始化由开发者编码决定。
    3):通过修饰符lazy在首次使用的时初始化:声明变量指定初始化动作,但该动作要等到变量第一次使用的时才进行初始化。
    此处的prefs对象使用lazy规定了属性值在首次使用时初始化,且初始化动作通过by后面的表达式来指定,即”{context.getSharedPreferences(“default”,Context.MODE_PRIVATE)}"。连同大括号在内的这个表达式其实是个匿名实例,它在内部定义了prefs对象的初始化语句,并返回SharedPreferences类型的变量值。
  2. with函数
    with函数的格式为:“with(函数头语句){函数体语句}”

例如下方的with(){}函数使用示例:

private fun findPrefence(name: String, default: T): T = with(prefs){val res: Any =when(default){is Long -> getLong(name,default);is String -> getString(name,default);is Int -> getInt(name,default)is Boolean -> getBoolean(name,default)else ->   throw IllegalArgumentException("This type can be saved into Preferences")}return res as T}

可以看出,with方法的函数语句分为2部分:

  1. 函数头语句:
    头部语句位于with的圆括号内部。它先于函数体语句执行,并且头部语句返回一个对象,函数体语句语句在该对象的命名空间中运行。也就是说,体语句可以直接调用该对象的方法,而无须显式指定头部对象的实例名称。
  2. 函数体语句:
    体语句位于常规的大括号内部。它要等头部语句处理完毕才会执行,同时体语句在头部语句返回对象的命名空间中运行。也就是说,体语句允许直接调用头部对象的方法,而无须显式指定该对象的实例名称。

2.数据库帮助类:SQLiteOpenHelper

SQLite是手机上的轻量级数据库,但与Oracle一样存在数据库的创建、变更、删除、连接等DDL操作,以及数据表的增、删、改、查等DML操作。
Android为SQLite提供了2个管理类:SQLiteDatabase、SQLiteOpenHelper类。

  1. SQLiteDatabase:
    其是SQLite的数据库管理类,开发者可在Activity页面代码或者能取到Context的地方获取数据库实例。
//创建数据库,如果已经存在,就打开
SQLiteDatabase db =getApplicationContext().openOrCreateDatabase("test.db",Context.MODE_PRIVATE,null);//删除数据库
getApplicationContext().deleteDatabase("test.db");

SQLiteDatabase的常见方法:

  • openDatabase:打开指定路径的数据库
  • isOpen:判断数据库是否已打开
  • close:关闭数据库
  • execSQL:执行拼接好的SQL控制语句。一般用于建表、删表、变更表结构。
  • delete:删除符合条件的记录。
  • update:更新符合条件的记录。
  • insert:插入一条记录。
  • query:执行查询操作,返回结果集的游标。
  • rawQuery:执行拼接好的SQL查询语句,返回结果集的游标。
    上述种,insert、update方法可直接使用的数据结构是ContentValues类,它类似于映射Map,也提供了put和get方法用来存取键值对。区别在于,ContentValues的键只能是字符串,查看ContentValues的源码会发现其内部保存键值对的数据结构就是HashMap"private HashMap<String,Object> mVlues;"。
    另外,注意表的查询操作还借助于游标类Cursor来实现,上述方法种,query和rawQuery这2个查询方法返回的都是Cursor对象,那么获取查询结果就得根据游标的指示一条条遍历结果集合。

游标Cursor类的常用方法:
·1.游标控制类方法,用于指定游标的状态。
1):close:关闭游标。
2):isClosed:判断游标是否关闭。
3):isFirst:判断游标是否在开头。
4):isLast:判断游标是否在末尾。
2.游标移动类方法,把游标移动到指定位置。
1):moveToFirst:移动游标到开头。
2):moveToLast:移动游标到末尾。
3):moveToNext:移动游标到下一个。
4):moveToPrevious:移动游标到上一个。
5):move:往后移动游标若干偏移量。
3.获取记录类方法,可获取记录的数量、类型以及取值。
1):getCount:获取记录数。
2):getInt:获取指定字段的整型值。
3):getFloat:获取指定字段的浮点数值。
4):getString:获取指定字段的字符串值。
5):getType:获取指定字段的字段类型。

  1. SQLiteOpentHelper:
    SQLite仅仅提供数据库的DDL(数据定义)和DML(数据管理)操作。SQLiteOpenHelper是SQLite的使用帮助类,它是一个数据库操作的辅助工具,用于知道开发者合理使用SQLite。
    在App开发中进行业务数据的保存和读取,按照以下步骤:
  • 新建一个数据库操作类继承自SQLiteOpenHelper,提示要重写onCreate和onUpgrade这2个方法。其中onCreate()方法只在第一次打开数据库时执行,在此可进行表结构创建的操作;onUpgrade()方法在数据库版本升高时执行,因此在onUpgrade()内部可以根据不同的新旧版本号进行表结构变更处理。
  • 要封装保证数据库安全的必要方法,包括获取单例对象、打开数据库连接、关闭数据库连接等。
    (1).获取单例对象:确保运行时数据库只被打开一次,避免重复打开数据库扔出异常。
    (2).打开数据库连接:SQLite也有锁机制,即读锁和写锁的处理,故而数据库连接分为2种:调用getReadableDatabase()【读】、getWriteableDatabase()【写】
    (3).关闭数据库连接:数据库操作完毕,应当调用SQLiteDatabase对象的close()方法关闭数据库连接。
  • 提供对表记录进行增、删、改、查的操作方法。

对于Kotlin,运用更加安全的ManagedSQLiteOpenHelper:
系统自带的SQLiteOpenHelper它并未封装数据库管理类SQLiteDataabse,造成一个后果:开发者需要操作表之前中手工打开数据库连接,然后再操作结束后手工关闭数据库连接。可是手工开关数据库连接存在着诸多问题。比如数据库连接是否造成业务异常。都制约SQLiteOpenHelper的安全性。
于是,Kotin结合Anko库推出了改良版的SQLite管理工具————ManagedSQLiteOpenHelper.它封装了数据库连接的开关操作,使得开发者完全无须关心SQLiteDatabase在何处、何时调用,避免了手工开关数据库连接可能导致的各种异常。ManagedSQLiteOpenHelper的用法与SQLiteOpenHelper几乎一模一样,唯一区别:数据表的增删改查语句需要放在use语句块之中,具体格式:

use{//1.插入记录//insert(...)//2.更新记录//update(...)//3.删除记录//delete(...)//4.查询记录//query(...)/rawQuery(...)
}

注:新的管理类ManagedSQLiteOpenHelper来自于Anko库,所有在文件头部,需要导入import org.jetbrains.anko.db.ManagedSQLiteOpenHelper。另外,有别于常见的anko-common包,Anko库把和数据库有关的部分放到了anko-sqlit包中,所有,需要修改模块下的build.gradle文件,在dependencies节点中补充anko-sqlite包编译配置:compile "org.jetbrains.anko:anko-sqlite:$anko_version"

3.文件I/O操作

数据库不是万能的,更多的其他格式的数据仍然要以文件形式保存。Java的文件I/O功能很强大,但是很啰嗦。

3.1文件保存空间

手机上的存储空间:内部存储、外部存储。内部存储放的是手机系统以及各应用的安装目录。外部存储放的是公共文件,如图片、文档、音视频文件等。
早期的外部存储被作为可拔插的SD卡,然而SD卡质量不统一,经常影响APP的正常运行。现如今,我们的手机把SD卡固化到手机内部,但Android仍然称之为外部存储。由于内部存储空间优先,因此为了不影响系统的流畅运行,APP运行过程中需要处理的文件都保存在外部存储空间。
为了保证App正常的读写外部存储,需要在清单文件增加SD卡权限配置:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

完成上面的权限配置后,代码里面就可以正常读写SD卡的文件。Android从7.0开始加强了SD卡的权限管理,即使声明了完整的SD卡操作权限,系统仍然默认禁止该APP访问外部存储。不过系统默认关闭存储只是关闭外部存储的公共空间,外部存储的私有空间仍然可以正常读写。因为Android把外部存储分为了2块区域:所有应用均可访问的公共空间、只有应用自己才可以访问的专享空间。
内部存储保存着每个应用的安装目录,但是安装目录的空间很紧张,所有Android在SD卡的“Android/data”目录下给每个应用又单独建了一个文件目录,用于给应用保存自己需要处理的临时文件。这个给每个应用单独建立的文件目录只有当前应用才能够读写文件,其他应用是不允许进行读写的,所以"Android/data"目录算是外部存储上的私有空间。这个私有空间本身已经做了访问权限的控制,因此它不受系统禁止访问的影响,应用操作自己的文件目录就不成问题。私有文件的目录只有属主应用才能访问,所以一旦属主应用被用户卸载,那么对应的文件目录也会被一起清理掉。

关于外部存储中的2个空间的路径获取方法:
1.获取公共空间的存储路径调用的是Environment.getExternalStoragePublicDirectory()
2.获取应用私有空间的存储路径调用的是:getExternalFilesDir()
Android 7.0之后默认禁止访问公共存储目录。

3.2 读写文本文件

Java中常常封装一个文件工具类:

public class FileUtil{//保存文本文件public static void saveText(String path,String txt){try{FileOutPutStream fos=new FileOutPutStream(path);fos.write(txt.getBytes());fos.close();}catch(Exception e){e.printStackTrace();}}//读取文本文件public static String openText(String path){String readStr="";try{FileInputStream fis=new FileInputStream(path);byte[] b=new byte[fis.available()];fis.read(b);readStr=new String(b);fis.close();}catch(Exception e){e.printStackTrace();}return readStr;}
}

上述Java代码,“长!”那么我们来看看Kotlin怎么处理的:
文件的写入操作:

//把文本写入文件
File(file_path).writeText(content)

如要往源文件追加文本,则可调用appendText()。

文件的读取操作:

  • readText:读取文本形式的文件内容。
  • readLines:按行读取文件内容。返回一个字符串List,文件有多少行,队列中就有多少个元素。
//从文件中读取全部的文本:
val content=File(file_path).readText()

3.3 读写图片文件

像图片等2进制格式的文件,可通过字节数组的形式写入文件,kotlin提供了writeBytes()方法用于覆盖写入字节数组,也提供了appendBytes()方法用于追加数组。
但是由于图像存储比较特殊,涉及到压缩格式与压缩质量,因此还得通过输出流来处理(Bitmap的compress()方法要求的)

//图片文件的写入代码
fun saveImage(path: String,bitmap: Bitmap){try{val file= File(path)//outputStream获取文件的输出流对象//writer获取文件的writer对象//printWriter获取文件的PrintWriter对象val fos:OutputStream =file.outputStream()//压缩格式未JPG图像,压缩质量为80%bitmap.compress(Bitmap.CompressFormat.JPEG,80,fos)fos.flush()fos.close()}catch (e: Exception){e.printStackTrace()}}

要想从图片文件中读取位图信息,按上面的writeBytes使用说明,应调用readBytes()方法。该办法可行,Android的BitmapFactory刚好提供了decodeByteArray()函数,用于从字节数组中解析位图:

//方式1:利用字节数组读取位图
//readBytes读取字节数组形式的文件内容
val bytes=File(file_path).readBytes()
//decodeByteArray从字节数组中解析图片
val bitmap=BitmapFactory.decodeByteArray(bytes,0,bytes.size)

将位图保存为图片文件时,通过输出流进行处理;反过来,从文件读取位图数据也可以用输入流来实现。BitmapFactory的decodeStream()方法使得输入流解析位图变成现实:

//方式2:利用输入流读取位图
//inputStream获取文件的输入流对象
val fis=File(file_path).inputStream()
//decodeStream从输入流解析图片
val bitmap=BitmapFactory.decodeStream(fis)
fis.close()

上述的2种读取图片文件的方式都包含了:先从File对象获得文本内容,再利用BitmapFactory解码成位图。
大招:decodeFile。只要给出图片文件的完整路径,文件读取和 位图解析的操作都一起搞定。

//方式3:直接从文件路径获取位图
//decodeFile从指定路径解析图片
val bitmap=BitmapFactory.decodeFile(file_path)

3.4 遍历文件目录

Kotlin把目录遍历重新梳理了以下,归纳为FileTreeWalk文件树,通过给文件树设置各式各样的参数与条件即可化繁为简,轻松获取文件的搜索结果。
文件树首先调用File对象的walk方法得到FileTreeWalk实例,接着依次为该实例设置具体的条件,包括遍历深度、是否匹配文件夹、文件扩展名以及最后的文件队列循环处理。

    var fileNames:MutableList<String> =mutableListOf()//在该目录下走一圈,得到文件目录树结构val fileTree:FileTreeWalk = File(mPath).walk()fileTree.maxDepth(1)//需遍历的目录层级为1,即无须检查子目录.filter{it.isFile}//只挑选文件,不处理文件夹//.filter{it.extension == "text"}//选择扩展名为txt的文本文件.filter{it.extension in listOf("png","jpg")}//选择扩展名为png和jpg的图片文件.forEach{fileNames.add(it.name)}//循环处理符合条件的文件

4.Application全局变量

Application是android的又一组件,它的生命周期接连着app的整个运行过程,因此,开发者常常给自定义的Application运用单例模式,使之具备全部变量的管理功能。

4.1 Application单例化

在App运行过程中,有且仅有一个Application对象贯穿应用的整个生命周期,所以适合在Application中保存应用运行时的全局变量,而开展该工作的基础是必须获得Application对象的唯一实例,也就是Application单例化。获取一个类的单例对象需要运用程序设计中常见的单例模式,通过Java编码实现单例化:

public class MainApplication extends Application{private static MainApplication mApp;public static MainApplication  getInstance(){return mApp;}@Overridepublic void onCreate(){super.onCreate();mApp=this;}
}

上述代码中,单例模式的实现过程主要有3个步骤:

  1. 在自定义的Application类内部表明一个该类的静态实例。
  2. 重写onCreate()发明合法,把自身对象赋值给第一步声明的实例。
  3. 提供一个供外部调用的静态方法getInstance(),该方法返回第一步声明的Application类实例。

上述代码同样的单例化过程通过Kotlin编码实现的话,静态属性和静态方法可利用伴生对象(理解为“人的影子”)来实现,这就形成了Kotlin单例化的第一种方式:手工声明属性单例化:

  1. 手工声明属性的单例化:
    与Java的不同之处在于,Kotlin引入了空安全机制,所以静态属性要声明为可空变量,然后获得实例时要在末尾加上“!!”表示非空,也可以事先将自身实例声明为延迟初始化属性。2种声明手段都是为了确保Application类提供给外部访问的自身实例必须是非空的。
class MainApplication : Application(){override fun onCreate() {super.onCreate()instance=this}//单例化的第一种方式:声明一个简单的application属性companion object {//情况1:声明可空的属性
//        private var instance: MainApplication? =null
//        fun instance()=instance!!//情况2:声明延迟初始化属性private lateinit var instance: MainApplicationfun instance()= instance}
}
  1. 借助Delegates的委托属性单例化:
    方式1的单例化虽然提供了2种属性的声明手段,但只是为了保证自身实例的非空。如果仅仅是确保属性非空,Kotlin提供了一个系统工具进行自动校验———Delegate的notNull()方法。该方法返回非空校验的行为,只要将其属性的读写行为委托给这个非空校验行为,开发者就不需要手工进行非空判断。利用Delegates工具的属性代理功能就构成了Kotlin的第二种单例化方式。
//利用系统代理行为实现单例化的kotlin代码:
class MainApplication : Application(){override fun onCreate() {super.onCreate()instance=this}//单例化的第二种方式:利用系统字带的Delegates生成委托属性。companion object {private var instance: MainApplication by Delegates.notNull()fun instance() = instance}
}

上述的2种方式获取Application实例是一样的,带哦有"MainApplication.instance()"这个函数获得Application的自身实例。

  1. 自定义代理行为的单例化:
    前2种单例都只完成了非空校验,不是严格意义上的单例化。
    真正的单例化是有且仅有一次赋值操作。(前2种单例化并未实现唯一赋值功能)
    系统字带的Delegates工具没有提供校验行为。所以开发者必须自己写一个能够校验赋值次数的行为类,目的是接管委托属性的读写行为。(参考前面的Preference<T>完成自定义的委托行为编码)。
//自定义代理行为的单例化代码
class MainApplication : Application(){override fun onCreate() {super.onCreate()instance=this}//单例化的第三种方式:自定义一个非空且只能一次性赋值的委托属性companion object {private var instance:MainApplication by NotNullSingleValueVar()fun  instance() = instance}//定义一个属性管理类,进行非空和重复赋值的判断private class  NotNullSingleValueVar<T>() : ReadWriteProperty<Any?,T>{private var value: T? =null//非空的校验override fun getValue(thisRef: Any?, property: KProperty<*>): T {return value ?: throw IllegalArgumentException("application not initialized")}//重复赋值的校验override fun setValue(thisRef: Any?, property: KProperty<*>, value: T) {this.value=if (this.value==null) valueelse throw IllegalArgumentException("application already initialized")}}

4.2 利用Application实现全局变量

一旦有了单例的Application对象,就意味着App在运行程序过程中获取的Application实例是唯一的。因此可在该实例内部声明几个静态成员变量,从而形成所谓的全局变量。
全局的意思就是其他代码都可以引用该变量,因此,全局变量是共享数据和传递信息的好方法。
适合在Application中保存的全局变量主要由以下数据:

  • 会频繁读取的信息,例如用户名、手机号等
  • 从网络上获取的临时数据,为节约流量也为减少用户等待时间,想暂时放在内存中供下次使用,例如应用logo、商品图片等
  • 容易因频繁分配内存而导致内存泄漏的对象,例如处理器Handler、线程池ThreadPool等。

通过Applicaiton 实现全局变量的读写,需要:

  • 写一个类MainApplication继承自Application,该类要采用单例模式,内部声明自身的一个静态单例对象,在创建App时把自身赋值给这个静态实例,然后提供一个访问该静态对象的instance函数。
  • 在Activity中调用MinApplication的instance方法,获取MainApplication的一个静态对象,便可通过该对象访问MainApplication 的公共变量和公共方法。
  • 在清单文件中注册新定义的Application类名,即在application节点中增加android:name属性,“android:name=.MainApplication”
//在清单文件中的配置:
<application 
android:name=".MainApplication"(替换成自己继承Application的类的类名)
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name">
查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 记录Android对接Java的OSS上传/回调踩过的坑

    记录Android对接Java的OSS上传/回调踩过的坑直传上传回调总结一下 在网上找了很多资料,都没有关于Android与Java的OSS,就好像这种活java已经被php取代了一般,没办法只能自己动手了,万一~以后用的着呢。 在这里我是将直传与回调合并在了一起,用的是springboot。别问,问就是…...

    2024/4/16 23:09:18
  2. ubuntu14.04中64位安装代码比较工具beyond compare

    1. Beyond Compare官网下载amd-64位的,安装失败,依赖于ia32-libs,但是这个文件已经不在源里了;2. 直接装32位的,可行。去官网下载32位的i386二进制包bcompare-3.3.8.16340_i386.deb,dpkg -i安装,提示缺少依赖的文件,$ sudo dpkg -i bcompare-3.3.8.16340_i386.deb Sele…...

    2024/4/28 18:00:01
  3. 金蝶K3数据库优化/备份操作指南

    本文主要说说以下3个方面的操作:1、数据库备份:本文以sever 2008 R2为例2、索引优化:本文以sever 2008 R2为例3、个别账号卡顿优化:见另外一篇文章https://blog.csdn.net/hzfw2008/article/details/77572778数据库备份或索引优化工作最好在闲时处理,否则会影响用户使用体验…...

    2024/4/16 23:08:48
  4. 五分钟学会Kotlin语法

    为什么使用Kotlin 项目一期在收尾了终于有时间折腾了,一个多月以来Kotlin从入门到现在,坚持用来开发的切身感受。因为语法与Java的区别挺大的一开始很想放弃,如果不是因为项目在使用,想必很少人会尝试这样一门小众语言,但是习惯后会发现这些年究竟浪费多少时间在写无用的J…...

    2024/4/16 23:08:12
  5. 朋友圈都在说的央行数字货币,究竟跟你有什么关系

    文 :王也出品 :Odaily星球日报(ID:o-daily)10 月 28 日,黄奇帆宣告:中国人民银行很可能是全球第一个推出数字货币的央行。中国金融四十人论坛(CF40)学术顾问、中国国际经济交流中心副理事长黄奇帆在首届外滩金融峰会全体大会“碰撞与融合——数字化浪潮重塑全球金融生…...

    2024/4/16 23:10:18
  6. jsp+servlet+mysql员工管理系统源代码下载

    原文:jsp+servlet+mysql员工管理系统源代码下载 源代码下载地址:http://www.zuidaima.com/share/1550463498996736.htmjsp+servlet+mysql员工管理系统...

    2024/4/18 14:10:16
  7. 数据库备份 一致性问题

    一,备份与恢复基础 1.,备份简介 备份是数据的一个副本,一般包括控制文件和数据文件等 物理备份与逻辑备份 物理备份指物理数据库文件的副本,逻辑备份是指使用Oracle工具抽取逻辑数据(例如,表或存储过程)并保存在二进制文件中。热备份与冷备份 冷备份是指数据库完全关闭状…...

    2024/4/19 20:32:07
  8. JS操作html表格 添加行,清空行,获取值, 复选框换图片

    Js操作html表格,这个复选框换图标我是把复选框样式 display:none,然后触发图片的点击事件去关联checkbox 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&…...

    2024/5/6 11:57:54
  9. 致Android开发者的Kotlin入门

    Google在今年的IO大会上宣布,将Android开发的官方语言更换为Kotlin,作为跟着Google玩儿Android的人,我们必须尽快了解和使用Kotlin语言。不过Kotlin毕竟是语言级别的新事物,比起Java来说,从编程思想到代码细节都有不少变化,我们最好先对Kotlin有个整体的基本的了解,然后…...

    2024/4/16 23:10:24
  10. Navicat Premium实现mysql数据库备份/还原

    转发请备注原文地址:https://www.niwoxuexi.com/blog/php/article/161.htm...Navicat Premium 是一个非常好用的数据库(支持 MySQL、SQLite、Oracle、SQLServer 及 PostgreSQL 等数据库)的图形化工具,今天我们主要是讲解如何用Navicat(Navicat Premium ,或者Navicat for …...

    2024/4/20 14:37:51
  11. 推荐系统技术

    目录推荐系统技术整体流程用户画像match部分CF(协同过滤)SwingContent I2ISession-based I2I向量召回RankI2IRank部分LRLR+GBDTFM/FFMMLRFNNAFMNFMPNNWide&DeepDeepFMDeepFFMDCNxDeepFMFAT-DeepFFMDINDIEN推荐系统技术整体流程推荐系统整个过程分为几个阶段,在这里把他分…...

    2024/4/18 6:04:01
  12. 基于Java Web的新闻发布系统设计与实现

    获取项目源文件,技术交流与指导联系Q:1225467431 摘要:现如今快速发展的互联网,已成为新兴的媒体发布形式,逐步影响到传统媒体行业的发展。与传统的信息传播媒体如电视、广播、报纸等相比,电脑、智能手机等终端因其传递信息方便、快捷,并满足人们对外界瞬息万变的信息的…...

    2024/4/16 23:10:06
  13. MySQL Workbench下数据库备份与恢复详解

    一、登录数据库,找到Data Export 二、1、在左边选择自己要导出的数据库 2、选择数据库下要导出的表 3、选择导出位置 4、开始导出 三、导出后的数据 四、数据库恢复...

    2024/5/6 7:09:30
  14. Android 谷歌官方Kotlin语言入门教程(一)基础语法

    Kotlin简介Kotlin是一门与Swift类似的静态类型JVM语言,由JetBrains设计开发并开源。与Java相比,Kotlin的语法更简洁、更具表达性,而且提供了更多的特性,比如,高阶函数、操作符重载、字符串模板。它与Java高度可互操作,可以同时用在一个项目中Kotlin官方学习文档:1、教程 …...

    2024/4/16 23:10:06
  15. ThingJSAPI之控制楼层效果

    如何控制楼层的层级效果?比如进入楼层展开楼层?三维可视化园区中该怎么去访问对象?又是如何让场景显示和隐藏的呢?在ThingJS物联网可视化PaaS平台中,ThingJS提供了控制场景的方法,让我们来看看它是如何控制的吧! ThingJS官方示例中按分类访问对象,使用全局APP对象,通过…...

    2024/5/6 6:44:30
  16. vuejs 和 element 搭建的一个后台管理界面

    介绍:  这是一个用vuejs2.0和element搭建的后台管理界面。 相关技术:  vuejs2.0:渐进式JavaScript框架,易用、灵活、高效,似乎任何规模的应用都适用。  element:基于vuejs2.0的ui组件库。  vue-router:一般单页面应用spa都要用到的前端路由。  vuex:Vuex 是一…...

    2024/4/20 12:49:29
  17. Kotlin 第一章: Kotlin简介以及插件安装

    Kotlin 第一章: Kotlin简介以及插件安装写在最前面:这篇文章是我把之前的文章更改编辑器,重新编译格式之后,上传的,所以文章顺序看起来会很奇怪,不过 CSDN 不支持两种编辑器互通也是蛮尴尬的。重点来了:首先,先来说一下 Kotlin 的发布时间吧。Kotlin 是于3月11号发布的…...

    2024/4/16 23:09:48
  18. logrus hook输出日志到本地磁盘

    logrus是go的一个日志框架,它最让人激动的应该是hook机制,可以在初始化时为logrus添加hook,logrus可以实现各种扩展功能,可以将日志输出到elasticsearch和activemq等中间件去,甚至可以输出到你的email和叮叮中去,不要问为为什么可以发现可以输入到叮叮中去,都是泪,手动…...

    2024/4/16 23:09:00
  19. SQL SERVER 数据库备份的三种策略及语句

    1.全量数据备份 备份整个数据库,恢复时恢复所有。优点是简单,缺点是数据量太大,非常耗时全数据库备份因为容易实施,被许多系统优先采用。在一天或一周中预定的时间进行全数据库备份使你不用动什么脑筋。使用这种类型的备份带来的问题是非常缺乏灵活性,而且当数据库被冲掉后…...

    2024/4/16 23:10:12
  20. 熊市学技术—《挖矿=POW=工作量证明》

    在《比特币:四十八万页的账本》中提到,货币的本质是记账方式,比特币是一种分布式的记账方式,那问题来了,这账是谁来记,怎么记?答案:矿工通过挖矿,来记账。说起挖矿这两字给人的第一印象是一帮黑不溜秋的矿工拿着锄头和探照灯,在漆黑的地下挖掘,在无数声叮叮当当的敲…...

    2024/4/16 23:10:00

最新文章

  1. GaussDB数据库SQL系列-复合查询

    目录 一、前言 二、复合查询基础 三、实际应用示例 1、使用UNION合并查询结果 2、使用INTERSECT找出共同元素 3、使用EXCEPT排除特定结果 四、高级技巧 1、子查询实例 2、JOIN的应用 五、总结 一、前言 GaussDB是华为自主创新研发的分布式关系型数据库&#xff0c;具…...

    2024/5/6 12:02:36
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/5/6 9:38:23
  3. Golang快速入门教程(一)

    目录 一、环境搭建 1.windows安装 2.linux安装 3.开发工具 二、变量定义与输入输出 1.变量定义 2.全局变量与局部变量 3.定义多个变量 4.常量定义 5.命名规范 6.输出 7.输入 三、基本数据类型 1.整数型 2.浮点型 3.字符型 4.字符串类型 转义字符 多行字符…...

    2024/4/30 15:22:52
  4. 【Godot4自学手册】第三十五节摇杆控制开门

    本节主要实现&#xff0c;在地宫墙壁上安装一扇门&#xff0c;在核实安装一个开门的摇杆&#xff0c;攻击摇杆&#xff0c;打开这扇门&#xff0c;但是只能攻击一次&#xff0c;效果如下&#xff1a; 一、添加完善节点 切换到underground场景&#xff0c;先将TileMap修改一下…...

    2024/5/3 8:55:49
  5. 利用Spark将Kafka数据流写入HDFS

    利用Spark将Kafka数据流写入HDFS 在当今的大数据时代&#xff0c;实时数据处理和分析变得越来越重要。Apache Kafka作为一个分布式流处理平台&#xff0c;已经成为处理实时数据的事实标准。而Apache Spark则是一个强大的大数据处理框架&#xff0c;它提供了对数据进行复杂处理…...

    2024/5/5 19:29:28
  6. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/4 23:54:56
  7. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/4 23:54:56
  8. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/5/4 23:54:56
  9. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/6 9:21:00
  10. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/5/4 23:54:56
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/5/4 23:55:05
  12. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/5/4 23:54:56
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/5/4 23:55:16
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/5/4 23:54:56
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/6 1:40:42
  16. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/5/4 23:54:56
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/5/4 23:55:17
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/5/4 23:55:06
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/5/4 23:54:56
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/4 23:55:06
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/5/5 8:13:33
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/5/4 23:55:16
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/5/4 23:54:58
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/4 23:55:01
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/5/4 23:54:56
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57