我正在使用自定义Application类开发一个应用程序,它初始化了几个单例,以便它们在所有应用程序工作时间内生存.我的应用程序中还有一些与这些单例一起使用的服务.可能的情况是,应用程序类将被服务器之前的单例实例的Android销毁,因此服务将无法使用它们吗?或者应用程序总是为它的上下文服务而生活?找到解决这种情况的最佳方法是什么?
谢谢.
我使用 Gradle Kotlin DSL,在我的项目中我有单独的build-dependencies
gradle 模块,settings.gradle.kts
如下所示:
pluginManagement {
repositories {
google()
jcenter()
gradlePluginPortal()
}
}
includeBuild("build-dependencies")
Run Code Online (Sandbox Code Playgroud)
该模块包含空插件实现和Deps
对象。其build.gradle.kts
如下:
repositories {
google()
jcenter()
gradlePluginPortal()
}
plugins {
`kotlin-dsl`
`java-gradle-plugin`
}
gradlePlugin {
plugins.register("com.example.dependencies") {
id = "com.example.dependencies"
implementationClass = "com.example.dependencies.DependenciesPlugin"
}
}
Run Code Online (Sandbox Code Playgroud)
部门对象:
object Deps {
const val buildTools = "com.android.tools.build:gradle:4.1.1"
// more dependencies
}
Run Code Online (Sandbox Code Playgroud)
我想Deps
通过在文件中应用插件来在所有模块中使用这个对象build.gradle.kts
。
plugins {
id("com.example.dependencies")
}
Run Code Online (Sandbox Code Playgroud)
它工作正常,我可以导入和使用Deps
对象。
但是当我想在根项目中使用它时build.gradle.kts
,更准确地说在构建脚本中使用它时,会出现一个问题,如下所示:
buildscript {
repositories {
google() …
Run Code Online (Sandbox Code Playgroud) 我几乎相同的问题,其中描述这里,答案在这个职位并不能帮助我,我立即释放我的乐队均衡水平设置之后.它在我的4.0.4设备上运行良好,它在朋友的2.3.5设备上运行良好,它在一小部分设备上崩溃,并且在这些设备上运行哪个版本的android无关紧要.
所以有错误
Equalizer mEqualizer = new Equalizer(0, mediaPlayer.getAudioSessionId());
java.lang.UnsupportedOperationException: Effect library not loaded
at android.media.audiofx.AudioEffect.<init>(AudioEffect.java:355)
at android.media.audiofx.Equalizer.<init>(Equalizer.java:149)
Run Code Online (Sandbox Code Playgroud)
我不知道如何解决这个问题,有什么建议吗?
我试图在我用Kotlin编写的应用程序中避免RxJava链的终端状态,所以我发现转换Observable<T>
到密封类的Observable<Result<T>>
位置Result
是正确的.
sealed class Result<T>
data class Success<T>(val data: T) : Result<T>()
data class Failure<T>(val throwable: Throwable) : Result<T>()
Run Code Online (Sandbox Code Playgroud)
让我们说我有这个网络请求是可观察的.
fun getOrganization(): Observable<Result<Boolean>> {
return api.getOrganization("google")
.map { Success(true) }
.onErrorReturn { Failure(RuntimeException("throwable")) }
}
Run Code Online (Sandbox Code Playgroud)
所以我最终要做的就是处理这样的结果.
fun main(args: Array<String>) {
getOrganization().subscribe({
when (it) {
is Success -> print("success = ${it.data}")
is Failure -> print("failure = ${it.throwable}")
}
})
}
Run Code Online (Sandbox Code Playgroud)
一切都应该工作得很好,但我在IDE中有这个错误.
是不是只是简单地使用子类而不是基类?
我发现,如果我明确地投射Success(true)
到Result<Boolean>
一切工作,但显示这个警告.
它为什么会发生,我在这里做错了什么?
UPD.
看起来这里的主要问题是靠近rxjava的onErrorReturn运算符.如果我完全删除它,那么即使没有out
像答案建议的关键字也能正常工作.
如果我Success
从map和onErrorReturn 返回,那么 …
我是Android编程的初学者,不幸的是我遇到了问题:)
我在我的游戏中有方法writeSettings(),当我想通过readSettings()方法加载最后一个游戏时,我试图保存一些变量来使用它.有一些参数,如第一(第二)PlayerName,第一(第二)PlayerScore等.我正在尝试使用SharedPreferences来保存它们,但是在启动程序时我得到"强制关闭"对话框.
SharedPreferences preferences = getPreferences(MODE_PRIVATE); //Global variable
private void writeSettings() {
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("timeSave", time);
editor.putString("firstPlayerNameSave", firstPlayerNameTextView.getText().toString());
editor.putString("secondPlayerNameSave", secondPlayerNameTextView.getText().toString());
editor.putString("firstPlayerScoreSave", firstPlayerScoreTextView.getText().toString());
editor.putString("secondPlayerScoreSave", secondPlayerScoreTextView.getText().toString());
editor.putInt("nowPlayerSave", nowPlayer);
editor.commit();
}
private void readSettings() {
//"time" parameter program reads in another method
firstPlayerNameTextView.setText(preferences.getString("firstPlayerNameSave", ""));
secondPlayerNameTextView.setText(preferences.getString("secondPlayerNameSave", ""));
firstPlayerScoreTextView.setText(preferences.getString("firstPlayerScoreSave", ""));
secondPlayerScoreTextView.setText(preferences.getString("secondPlayerScoreSave", ""));
nowPlayer = preferences.getInt("nowPlayerSave", -1);
}
Run Code Online (Sandbox Code Playgroud)
我怎么知道,问题出现在writeSettings()的第一个条目中.但我不知道我做错了什么?
对不起我的英语不好.
UPD.
12-23 16:23:31.334: ERROR/AndroidRuntime(410): Uncaught handler: thread main exiting due to uncaught exception
12-23 16:23:31.520: ERROR/AndroidRuntime(410): java.lang.RuntimeException: Unable …
Run Code Online (Sandbox Code Playgroud) 我需要你的帮助,可能这个问题对你来说很容易.我在/ res/raw文件夹中有一个文件.例如,它的id是R.raw.myFile.我需要获取"文件"对象.比如我可以用sdcard上的文件做
File file = new File("/sdcard/myFolder/myFile");
Run Code Online (Sandbox Code Playgroud)
我怎么能这样做?
顺便说一句,如果有一些错误,请为我的英语道歉.
我需要"文件"对象.不流.
假设我有一个简单的布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="80dp"
android:clipToPadding="false">
<LinearLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_launcher" />
...
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Eighth" />
</LinearLayout>
</ScrollView>
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_margin="16dp"
android:text="Button" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
请注意paddingBottom
,ScrollView
带有clipToPadding=false
。它是必需的,因此Button
看起来就像滚动视图内容上的浮动按钮。ScrollView填充用于在内容下方留出空间以使最后一个子项可用。
如果最后一个孩子是EditText
我希望通过软件键盘ScrollView
滚动EditText
显示。但这以https://imgur.com/GwOtLIq结尾
使用layout_marginBottom
代替可以实现某种预期的行为paddingBottom
,但是在这种情况下,显然我看不到我的内容Button
。截图https://imgur.com/oSC24qV
有没有一种方法ScrollView
可以避免键盘方面的干扰?
更新:完整的xml代码在这里https://pastebin.com/P8n0aZ2i
在我的应用程序中,我有一些耗时的逻辑,可以通过多种方式启动,比如自动或由用户手动启动。
// Let's describe different event sources as relays
val autoStarts = PublishRelay.create<Unit>()
val manualStarts = PublishRelay.create<Unit>()
val syncStarts = PublishRelay.create<Unit>()
// This is my time consuming operation.
fun longOperation() = Observable.interval(10, TimeUnit.SECONDS).take(1).map { Unit }
val startsDisposable = Observable
.merge(
autoStarts.flatMap { Observable.just(Unit).delay(30, TimeUnit.SECONDS) },
manualStarts
)
.subscribe(syncStarts) // merge emissions of both sources into one
val syncDisposable = syncStarts
.concatMap {
longOperation()
}
.subscribe(autoStarts) // end of long operation trigger start of auto timer
Run Code Online (Sandbox Code Playgroud)
启动继电器会产生许多排放。假设用户单击按钮进行手动启动,距离定时器自动启动还剩 5 秒。longOperation() …
在演示者创建不可变状态(模型)流和视图的情况下,尝试使用新的体系结构范式进行渲染。
无法理解如何处理只需要一次进行某些事件的情况。有几个例子。
1)Notes应用。我们有editText
和saveButton
。用户单击saveButton
,将进行一些处理,并且应清除editText。你们能描述一下ViewState
这里的内容以及大概的逻辑流程吗?
我现在看到的问题和陷阱:
editText.textChanges()
在主持人中订阅。如果我们text
在ViewState
每个渲染调用中都包含并渲染它,那么我们将陷入递归,因为它将发出新的textChange并更新状态并再次渲染。text
在ViewState
方向文本上还原它或取消/还原进程,看起来好像开箱即用。但是想象一下recyclerView
滚动位置。我们绝对需要保存它才能还原。我们无法在每个渲染调用中恢复它,因为它看起来很奇怪,不是吗?.doOnNext{ view.clearText() }
合理,那么我们在规范的MVI实现中是否有参考意见?Mosby没有它,如我所见。doOnNext
通话时视图消失。MVI应该为此提供帮助,但前提是它是的一部分ViewState
,对吗?2)Github应用。首先屏幕(组织)orgEditText
,okButton
,progressBar
。第二个屏幕(回购): recyclerView
。当用户进入组织orgEditText
并单击okButton
应用程序时,应向API提出请求,并在成功时导航到“回购”屏幕,如果成功,则显示“祝酒”。再次请您描述ViewState
一下组织屏幕,逻辑应该是什么样的?
我现在看到的问题和陷阱:
progressBar
和禁用okButton
。我们应该喜欢加载/内容/错误密封的类(我们称之为ContentState
),并将其实例放在我们的中ViewState
。View知道如何渲染ContentState.loading
并显示progressBar
和禁用okButton
。我对吗?Google提出了SingleLiveEvent
解决方案,但看起来很奇怪,然后应该有尽可能多的信息LiveData<SingleLiveEvent>
流,而不是真正的真理来源。其他人则建议从render func生成新的意图,这种意图更好,但是有些异步操作可能会再次更改状态,因此我们会在第一次显示Toast时得到第二个Toast。
我正试图从url播放mp3文件ExoPlayer
.
一切都很好,但现在我想知道什么时候getDuration()
音轨是安全的.一旦加载了轨道,我就需要它.没有在谷歌的示例项目中找到它.
当我试着立即得到它之后,exoPlayer.prepare()
我得到了UNKNOWN_TIME
.
android ×10
kotlin ×3
rx-java ×2
architecture ×1
equalizer ×1
exoplayer ×1
gradle ×1
java ×1
lifecycle ×1
media-player ×1
mosby ×1
reactivex ×1
scrollview ×1
service ×1