我试图在新的Android Studio 3.0 canary 2中打开我现有的项目.我根据说明更新了Gradle ,更改了依赖配置的名称,但我继续得到下一个错误:
Unable to resolve dependency for ':app@productionRelease/compileClasspath':
Could not resolve project : abChat.
Run Code Online (Sandbox Code Playgroud)
在另一个窗口:
Error:Could not resolve all dependencies for configuration ':bankOK:betaNewApiInnerTestRuntimeClasspath'.
> Unable to find a matching configuration in project :abChat:
- Configuration 'debugApiElements':
- Required apiLvl 'ProductFlavorAttr{name=newApi}' but no value provided.
- Required com.android.build.gradle.internal.dependency.AndroidTypeAttr 'AndroidTypeAttr{name=Aar}' and found compatible value 'AndroidTypeAttr{name=Aar}'.
- Required com.android.build.gradle.internal.dependency.BuildTypeAttr 'BuildTypeAttr{name=innerTest}' and found incompatible value 'BuildTypeAttr{name=debug}'.
- Found com.android.build.gradle.internal.dependency.VariantAttr 'VariantAttr{name=debug}' but wasn't required.
- Required org.gradle.api.attributes.Usage 'for runtime' …
Run Code Online (Sandbox Code Playgroud) 我想Observable
使用RxJava 2 创建一个来自视图的单击侦听器.我从最简单的实现开始(我不在这里使用lambdas来向您展示此方法中的不同类型):
Observable<View> viewObservable = Observable.create(new ObservableOnSubscribe<View>() {
@Override
public void subscribe(@NonNull ObservableEmitter<View> e) throws Exception {
mNewWordView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View value) {
if (!e.isDisposed()) {
e.onNext(value);
}
}
});
}
});
Run Code Online (Sandbox Code Playgroud)
然后我想到了onClickListener
如果不需要进一步设置为null 的方法.我发现有两种类似(对我来说)名称的方法:
e.setCancellable(Cancellable c);
和
e.setDisposable(Disposable d);
它们之间有什么区别,我应该使用哪种?
我目前正在编写一个允许保存草稿的应用程序(使用android版本> = 2.0).每个草案都通过联系人与联系人联系ContactsContract.Contacts.LOOKUP_KEY
.我的问题是,如果我更改联系人的姓名,查找键也会更改.这是这样的吗?
那么我需要一个查找键呢?我认为查找键永远不会改变,现在它无论如何都会改变.我对这种行为感到困惑......
有人可以向我解释如何永久链接到联系人吗?我应该使用ID而不是查找键吗?
提前致谢.
如何正确使用WorkManager
Android Jetpack中的新功能来安排每天一次的定期工作,这应该每天做一次并且只做一次?
我们的想法是检查具有给定标签的工作是否已经存在WorkManager
,否则开始新的定期工作.
我尝试使用下一种方法来做到这一点:
public static final String CALL_INFO_WORKER = "Call worker";
...
WorkManager workManager = WorkManager.getInstance();
List<WorkStatus> value = workManager.getStatusesByTag(CALL_INFO_WORKER).getValue();
if (value == null) {
WorkRequest callDataRequest = new PeriodicWorkRequest.Builder(CallInfoWorker.class,
24, TimeUnit.HOURS, 3, TimeUnit.HOURS)
.addTag(CALL_INFO_WORKER)
.build();
workManager.enqueue(callDataRequest);
}
Run Code Online (Sandbox Code Playgroud)
但value
总是空,即使我把一个断点里面Worker
的doWork()
方法(所以它肯定是正在进行中),并从另一个线程检查工作状态.
android android-architecture-components android-jetpack android-workmanager
我试图将包括在内的几种观点RecyclerView
纳入NestedScrollView
。我曾经用过setNestedScrollingEnabled(false)
,它对于小型数据集看起来不错,但对于大型数据集却开始变得迟钝。
在花了一些时间记录该onCreateViewHolder()
方法之后,我了解到回收者视图会像旧的一样立即创建它们ListView
。我试图在RecyclerView
文档中找到这种行为的原因,但是我在ScrollView
description中找到了:
永远不要将ScrollView与ListView一起使用,因为ListView负责其自身的垂直滚动。最重要的是,这样做会挫败ListView中处理大型列表的所有重要优化,因为它有效地迫使ListView显示其整个项目列表,以填充ScrollView提供的无限容器。
我希望这NestedScrollView
可以解决问题,但事实并非如此。
是否有任何方法,例如,使用一些自定义项LayoutManager
以RecyclerView
优化视图回收?
Ps当然,我知道getItemViewType(int pos)
使用这种技术添加自定义页眉和页脚的方法和可能性,但是对我来说这似乎是一个丑陋的解决方法。是的,我目前正在使用它,因为拥有比这样大的性能问题更难维护的代码更好。
optimization android recycle android-scrollview android-recyclerview
我想将“全屏”按钮添加到 Google 的标准 SimpleExoPlayer 实现中。我添加了 ImageButton,到目前为止一切正常。
然后我决定全屏将以下一种方式工作:按下按钮后,我用全屏 SimpleExoPlayerView 打开新活动,传递视频 uri 和当前位置,初始化播放器并寻找给定位置。它有效,但播放器重新初始化需要 1-3 秒,具体取决于不想要的设备。
现在我想在意图服务中拥有一个播放器实例,只需将现有播放器重新附加到任何想要显示它的视图(预览或全屏视图),如下所示:
mPlayerView.setPlayer(mPlayer);
Run Code Online (Sandbox Code Playgroud)
问题是服务将拥有播放器,而活动将拥有视图。他们中的任何一个都不能同时连接播放器进行查看。作为一种解决方法,我考虑使服务类可能具有到播放器的静态链接,因此活动将能够通过静态引用获取它。但这似乎是一些代码异味,我不知道线程之间的通信是否会出现问题。
那么,我如何将播放器从服务(不是 Serializable 或 Parcelable)传递给 Activity 或者如何将播放器视图传递给服务?
我们正在从 Android Gradle 插件 2.3.3 迁移到 Gradle 插件 3.0.1。我们的应用程序由应用程序模块和库模块组成。一些依赖项是可传递的(使用api
关键字连接),但即使使用使它们成为非传递也implementation
无济于事。将所有compile
-type 依赖项更改为新依赖项后,调试构建运行良好。然而,使用 Proguard 的发布版本显示了数千个警告(在 2.3.3 上一切顺利)
特别是,我不明白为什么当库中的 Android 类依赖于程序中的 Android 类时我们会遇到这样的问题(这里只是几个例子):
Warning: library class android.app.ActionBar$LayoutParams extends or implements program class android.view.ViewGroup$MarginLayoutParams
Warning: library class android.app.ActivityManager$TaskDescription extends or implements program class android.os.Parcelable
Warning: library class android.widget.Toolbar depends on program class android.view.ViewGroup$LayoutParams
Run Code Online (Sandbox Code Playgroud)
总体而言,以下类型的警告不会出现在 Gradle 插件 2.3.3 上(因此,Proguard 已配置):
Warning: there were 72 unresolved references to classes or interfaces.
You may need to add missing library jars or update …
Run Code Online (Sandbox Code Playgroud) 我在Android Studio中为现有的应用程序模块添加了一个新的库模块.主要的区别是添加了RxJava 2和Retrofit 2.更新了new模块的build.gradle后,我开始得到下一个错误:
错误:任务':app:transformResourcesWithMergeJavaResForBetaNewApiDebug'的执行失败.com.android.build.api.transform.TransformException:com.android.builder.packaging.DuplicateFileException:在APK META-INF/rxjava.properties中复制的重复文件File1:C:\ Users\Gaket.gradle\_caches\modules-2\files-2.1\io.reactivex.rxjava2\rxjava\2.0.2\cfccdd18cdfbe7b4773d42c9f3512eeafbe5cbf9\rxjava-2.0.2.jar File2:C:\ Users\Gaket.gradle\_caches\modules-2\files-2.1\io.reactivex\rxjava\1.1.5\ece7b5d0870e66d8226dab6dcf47a2b12afff061\rxjava-1.1.5.jar
我看到RxJava存在一些问题(我想尝试RxJava 2,在这里我看到RxJava 1和RxJava 2).在添加所有依赖项后立即出现问题,我们不在RxJava
主应用程序中使用.
更新: 正如我在下面提到的,我检查了三个主题(您可以在下面看到).这个问题:可能的重复类似于我在下面提到的那个: 这一个.他们两个都有解决方法,没有考虑我在答案中强调的真正问题.而答案是 "没有的生产就绪适配器从改造2至RxJava 2的时刻"(以下答案中描述的全部细节).
我检查了几个主题:首先 是一个具体问题的具体解决方案,第二个谈论rxbindings
,但我不使用它们,其他一些也没有解决我的问题或看起来像这个完全解决方法.我试图谷歌"rxjava 2和改造2"但没有找到解决方案.
这是build.gradle
图书馆:
apply plugin: 'com.android.library'
apply plugin: 'com.jakewharton.butterknife'
android {
compileSdkVersion 25
buildToolsVersion "25.0.0"
defaultConfig {
minSdkVersion 15
targetSdkVersion 24
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: …
Run Code Online (Sandbox Code Playgroud) 我们有一个 NestedScrollView,它包含两个不同的RecyclerView
垂直滚动。滚动布局位于SwipeRefreshLayout
.
更新:我们知道getItemViewType(pos)
方法并在其他地方使用它。但是这里我们有复杂的逻辑,将进一步分为 2 个不同的屏幕,因此我们为每个 RecyclerView 设置了两个单独的演示器,将它们合并为一个并在一个月内再次分离不是一种选择。
从某个时候,我们注意到使用滑动刷新更新屏幕开始冻结 UI:日志中的跳帧、无法使用 UI 进行任何操作、冻结进度条。最多需要五秒钟,但我们没有收到 ANR。它在开始时运行良好,在结束时冻结。如果我们notifyDataSetChanged()
在适配器中移除,一切看起来都不错。
我们试图删除回收站视图之一,从ViewHolder.onCreate()
和 中删除所有操作,onBindViewHolder()
但没有帮助。此外,我们交叉检查了问题是否来自某些数据处理(我们使用 RxJava 2 来操作线程),我们看到所有与网络、数据库和数据处理相关的操作都是在非 UI 线程中进行的,并且目前已经完成当滞后开始时。
这是布局:
<android.support.v4.widget.SwipeRefreshLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/swipe_refresh"
android:layout_width="match_parent"
android:layout_height=«match_parent"
android:orientation="vertical"
>
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content»
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation=«vertical"
android:paddingBottom="@dimen/spacing_bigger»>
<android.support.v7.widget.RecyclerView
android:id="@+id/recycle_chats"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white_bg"
/>
<android.support.v7.widget.RecyclerView
android:id="@+id/recycle_friends"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white_bg"
/>
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
</android.support.v4.widget.SwipeRefreshLayout>
Run Code Online (Sandbox Code Playgroud) android android-anr-dialog android-recyclerview android-nestedscrollview
问题是针对Android O及更高版本。
例如,我创建了一个名为“ default”的通知通道并进行设置IMPORTANCE_DEFAULT
。然后,我创建了一个通知,将其添加到频道并放入IMPORTANCE_HIGH
其构建器中。通知的最终优先级是什么?
我在文档中找不到答案,他们说要支持较早的版本,需要单独的答案:
为了支持运行Android 7.1(API级别25)或更低版本的设备,您还必须使用NotificationCompat类中的优先级常量为每个通知调用setPriority()。
https://developer.android.com/training/notify-user/channels#importance
android ×10
gradle ×2
rx-java2 ×2
android-architecture-components ×1
build.gradle ×1
exoplayer ×1
java ×1
optimization ×1
proguard ×1
recycle ×1
retrofit2 ×1