我已经阅读了很多关于匕首2的帖子和教程:
http://frogermcs.github.io/dependency-injection-with-dagger-2-custom-scopes/
https://github.com/codepath/android_guides/wiki/Dependency-Injection-with-Dagger-2
http://fernandocejas.com/2015/04/11/tasting-dagger-2-on-android/
https://github.com/konmik/konmik.github.io/wiki/Snorkeling-with-Dagger-2
等等
但我仍然对组件的生命周期以及它与模块和范围的关系感到困惑.我想确保在我只需要Singleton时不创建对象的多个实例.希望有人可以对这些有所了解:
在应用程序类中构建的组件的生命周期是什么?
在Activity或Fragment类中构建的组件的生命周期是什么?
如果我想从组件中获取单例实例,是否必须使用@Singleton或自定义范围对组件进行批注并在应用程序类中构建该组件?
如果我在应用程序类中构建一个组件,这是否意味着通过此组件可用的所有对象实例将是整个应用程序中的单例实例,直到该应用程序被终止或重新启动?
我有一个带有自定义范围的组件,比如@ActivityScope,我在一个Activity中构建该组件,在调用此活动的onDestroy()之后,通过该组件注入的对象实例会自动销毁吗?
我再一次有一个带有自定义范围的组件,比如@ActivityScope,我在ActivityA和ActivityB中构建这个组件,ActivityA和ActivityB是否会从这个组件共享相同的对象实例,或者它们将拥有自己的同一对象实例?
在emacs,您可以使用Ctrl+ X, Ctrl+ 打开新文件F
和去与以前的文件Ctrl+ B,并转到下一个文件Ctrl+ N.
如何在nano文本编辑器中执行此操作?虽然nano启动,然后打开新文件,以及如何在打开的文件之间切换nano文本编辑器?
例如,当我们在一个 Android 项目中有多个模块时,我们有一个 mylibrary 模块,以及一些其他模块应用程序,这些应用程序将通过以下方式将这个 mylibrary 模块包含在依赖项中 implementation project(':mylibrary')
然后,当我们想要添加将用于所有模块的库时,我们将使用api而不是implementation在 mylibrary 的 gradle 依赖项中添加库依赖项。例如:
api 'com.google.code.gson:gson:2.8.5'
Run Code Online (Sandbox Code Playgroud)
有时,库需要将 annotationProcessor 包含在依赖项中。
kapt "org.example:example:1.0.1"
Run Code Online (Sandbox Code Playgroud)
如果我想将此注释处理器包含在 mylibrary 的依赖项中并使其可用于多个模块,我应该使用什么来代替kapt?
对于使用gradle 7.2创建的android项目,项目gradle与之前的有很大不同,它现在只包含这些
// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
id 'com.android.application' version '7.1.2' apply false
id 'com.android.library' version '7.1.2' apply false
id 'org.jetbrains.kotlin.android' version '1.6.10' apply false
}
task clean(type: Delete) {
delete rootProject.buildDir
}
Run Code Online (Sandbox Code Playgroud)
settings.gradle也与以前有很大不同,它现在包含更多配置,如下
pluginManagement {
repositories {
gradlePluginPortal()
google()
mavenCentral()
// classpath 'com.google.gms:google-services:4.3.10'
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
}
}
rootProject.name = "My App"
include ':app'
Run Code Online (Sandbox Code Playgroud)
在哪里可以添加类路径classpath 'com.google.gms:google-services:4.3.10'?当我将其添加到 …
在rxjava 1中的Observable类中有一个from方法但在rxjava 2中找不到.如何在以下代码中替换rxjava 2中的from方法:
List<Integer> ints = new ArrayList<>();
for (int i=1; i<10; i++) {
ints.add(new Integer(i));
}
Observable.just(ints)
.flatMap(new Function<List<Integer>, Observable<Integer>>() {
@Override
public Observable<Integer> apply(List<Integer> ints) {
return Observable.from(ints);
}
})
Run Code Online (Sandbox Code Playgroud) 我看过这些链接是为Android中的Google日历添加事件,我可以添加事件但是如何让事件不被用户编辑?
https://developer.android.com/guide/topics/providers/calendar-provider.html#add-event
添加事件的代码.
String eventTitle = "Jazzercise";
long calID = 3;
long startMillis = 0;
long endMillis = 0;
Calendar beginTime = Calendar.getInstance();
beginTime.set(2018, 2, 18, 6, 00);
startMillis = beginTime.getTimeInMillis();
Calendar endTime = Calendar.getInstance();
endTime.set(2018, 2, 18, 8, 00);
endMillis = endTime.getTimeInMillis();
ContentResolver cr = getContentResolver();
ContentValues values = new ContentValues();
values.put(CalendarContract.Events.DTSTART, startMillis);
values.put(CalendarContract.Events.DTEND, endMillis);
values.put(CalendarContract.Events.TITLE, "Jazzercise");
values.put(CalendarContract.Events.DESCRIPTION, "Group workout");
values.put(CalendarContract.Events.CALENDAR_ID, calID);
values.put(CalendarContract.Events.EVENT_TIMEZONE, "America/Los_Angeles");
values.put(CalendarContract.Events.ORGANIZER, "google_calendar@gmail.com");
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_CALENDAR) == PackageManager.PERMISSION_GRANTED) {
Uri uri …Run Code Online (Sandbox Code Playgroud) 摇动 Android 设备并点击“调试”,每次都会立即崩溃。从 Android Studio logcat 中,它显示未加载源 URL,您是否初始化了实例?:
java.lang.AssertionError: No source URL loaded, have you initialised the instance?
at com.facebook.infer.annotation.Assertions.assertNotNull(Assertions.java:35)
at com.facebook.react.modules.debug.SourceCodeModule.getTypedExportedConstants(SourceCodeModule.java:39)
at com.facebook.fbreact.specs.NativeSourceCodeSpec.getConstants(NativeSourceCodeSpec.java:35)
at com.facebook.react.bridge.JavaModuleWrapper.getConstants(JavaModuleWrapper.java:129)
at com.facebook.react.bridge.queue.NativeRunnable.run(Native Method)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:27)
at android.os.Looper.loop(Looper.java:223)
at com.facebook.react.bridge.queue.MessageQueueThreadImpl$4.run(MessageQueueThreadImpl.java:226)
at java.lang.Thread.run(Thread.java:923)
Run Code Online (Sandbox Code Playgroud)
同样的 React Native 代码库,在 ios 上打开 dubug 模式工作正常,但在 Android 上打开调试模式时总是崩溃。从错误日志中看不出是什么原因造成的。
以下是我对 React Native 应用程序的依赖项,我使用 redux 和 redux-devtools-extension 进行调试。我缺少任何库吗?
"dependencies": {
"@react-native-async-storage/async-storage": "^1.15.14",
"@reduxjs/toolkit": "^1.7.0",
"expo": "~42.0.1",
"expo-permissions": "12.1.0",
"expo-splash-screen": "~0.11.2",
"expo-status-bar": "~1.0.4",
"expo-updates": "~0.8.1",
"react": "17.0.2",
"react-dom": …Run Code Online (Sandbox Code Playgroud) 在 Android 11 中,随着作用域存储强制执行,requestLegacyExternalStorage标志将不再适用于访问外部存储中的文件。和
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
Run Code Online (Sandbox Code Playgroud)
在清单文件中声明,以及用户在运行时授予的此权限,以下代码曾经能够读取该文件,但在 Android 11. 文件中无法读取 /sdcard/Documents/my_confi_file.json
try {
var fileContent = ""
val file = File("/sdcard/Documents/my_confi_file.json")
val fileInputStream = FileInputStream(file)
val size = fileInputStream.available()
val buffer = ByteArray(size)
fileInputStream.read(buffer)
fileContent = String(buffer, Charset.forName("UTF-8"))
fileInputStream.close()
} catch (e: IOException) {
e.printStackTrace()
}
Run Code Online (Sandbox Code Playgroud)
在 Android 11 中,是否仍然可以从此目录(/sdcard/Documents/)读取文件以及如何执行?
用例是设备和应用程序不是公开的,并且没有用户隐私问题。设备和应用程序的所有者想要将文件上传到设备中的此目录 (/sdcard/Documents/),应用程序将从该文件中读取内容。
这引发了错误:线程“main” java.lang.IllegalArgumentException中的异常:没有枚举常量Color.red
enum class Color(val value: String = "") {
RED("red"),
YELLOW("yellow"),
BLUE("blue")
}
fun main() {
print(Color.valueOf("red"))
}
Run Code Online (Sandbox Code Playgroud)
仅当我将 print 语句更改为:
print(Color.valueOf("RED"))
Run Code Online (Sandbox Code Playgroud)
是否可以使用自定义字符串通过 valueOf 分配给枚举值?
我有3个按钮,一个全宽按钮位于屏幕半宽的两个按钮的顶部.这是布局:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/btn_save"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Save"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@+id/btn_delete"
app:layout_constraintVertical_chainStyle="packed"/>
<Button
android:id="@+id/btn_delete"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Delete"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@+id/btn_cancel"
app:layout_constraintTop_toBottomOf="@+id/btn_save" />
<Button
android:id="@+id/btn_cancel"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Cancel"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toRightOf="@+id/btn_delete"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/btn_save"/>
</android.support.constraint.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)
在玩了一下之后,为了使取消按钮与删除按钮水平对齐,我必须在取消按钮中添加以下任一项.
app:layout_constraintBaseline_toBaselineOf="@+id/btn_delete"
Run Code Online (Sandbox Code Playgroud)
要么
app:layout_constraintVertical_bias="0.0"
Run Code Online (Sandbox Code Playgroud)
问题:
为什么ConstraintLayout按下取消按钮而不是将其与删除按钮对齐?为什么我必须在取消按钮上使用基线或偏差才能使其在同一条线上对齐?
除了使用基线和偏差之外,还有其他方法可以使取消按钮与删除按钮对齐吗?