我正在使用FragmentActivity和Fragments.
应用程序启动时:
FragmentActivity onCreate() <------
FragmentActivity onStart()
FragmentActivity onResume()
Fragment onAttach()
Fragment onCreate() <------
Fragment onCreateView()
Fragment onActivityCreated()
Fragment onStart()
Fragment onResume()
Run Code Online (Sandbox Code Playgroud)
一切都还可以,在Fragment onCreate()之前调用FragmentActivity onCreate().当我旋转:
Fragment onPause()
FragmentActivity onPause()
Fragment onStop()
FragmentActivity onStop()
Fragment onDestroyView()
Fragment onDestroy()
Fragment onDetach()
FragmentActivity onDestroy()
---
Fragment onAttach()
Fragment onCreate() <----------
FragmentActivity onCreate() <---------
Fragment onCreateView()
Fragment onActivityCreated()
Fragment onStart()
FragmentActivity onStart()
FragmentActivity onResume()
Fragment onResume()
Run Code Online (Sandbox Code Playgroud)
片段onCreate()在FragmentActivity onCreate()之前调用.为什么不一致?
在FragmentActivity onCreate()中,我生成了一些Fragment onCreate()得到的数据.由于这种奇怪的行为,我不得不将我的代码从Fragment onCreate()移动到Fragment onCreateView(),以确保我的数据之前已经生成过.
我正在使用FragmentStatePagerAdapter来保存Fragments,也许这就是原因?
android oncreate android-fragments android-fragmentactivity android-support-library
我移植到Android工作室3和4摇篮然后我改变了compile
对implementation
我的build.gradle文件.但我得到错误:
Error:Execution failed for task ':app:preDebugBuild'.
> Android dependency 'com.google.firebase:firebase-core' has different version for the compile (9.0.0) and runtime (11.6.0) classpath. You should manually set the same version via DependencyResolution
Run Code Online (Sandbox Code Playgroud)
当我改变implementation
到api
错误消失.但这不是解决方案.我有app模块和一个库模块.App build.gradle只有一个依赖项:
implementation project(':common-lib')
Run Code Online (Sandbox Code Playgroud)
在apply plugin: 'com.google.gms.google-services'
正确地放置在该应用的build.gradle文件的底部(该项目迁移之前合作,摇篮4)
来自gradlew应用程序的依赖关系:依赖关系(剪切文本):
编
debugAndroidTestCompileClasspath - Resolved configuration for compilation for variant: debugAndroidTest
+--- com.google.firebase:firebase-core:9.0.0
| \--- com.google.firebase:firebase-analytics:9.0.0
| +--- com.google.android.gms:play-services-basement:9.0.0
| | \--- com.android.support:support-v4:23.0.0
| | \--- com.android.support:support-annotations:23.0.0
| +--- com.google.firebase:firebase-common:9.0.0
| | +--- …
Run Code Online (Sandbox Code Playgroud) android gradle firebase android-studio android-gradle-plugin
我正在研究11.0.4 firebase库版本.今天我已切换到最新版本:11.2.0,当我尝试构建发布版本(启用ProGuard)时,我收到错误消息:
Warning:com.google.android.gms.internal.zzbdo: can't find referenced method 'boolean isInstantApp(java.lang.String)' in library class android.content.pm.PackageManager
Warning:there were 1 unresolved references to library class members.
Warning:Exception while processing task java.io.IOException: Please correct the above warnings first.
Error:Execution failed for task ':app:transformClassesAndResourcesWithProguardForRelease'.
> Job failed, see logs for details
Run Code Online (Sandbox Code Playgroud)
和gradle控制台:
Warning: there were 1 unresolved references to library class members.
You probably need to update the library versions.
(http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedlibraryclassmember)
Run Code Online (Sandbox Code Playgroud) 我已经实现了firebase广告,例如:
@Override
public void onCreate(Bundle savedInstanceState) {
(...)
mAdView.loadAd(adRequestBuilder.build());
}
@Override
public void onResume() {
mAdView.resume();
}
@Override
public void onPause() {
mAdView.pause();
}
@Override
public void onDestroy() {
mAdView.destroy();
}
Run Code Online (Sandbox Code Playgroud)
如果广告由于没有Internet连接而成功加载或失败(errorCode 2),它仍将被刷新:
我/广告:从现在起安排广告刷新60000毫秒.
当我们去背景然后前景(mAdView.resume()
,mAdView.pause()
)时我们得到的相同消息.
但如果我们得到"没有填补"
广告服务器无法填充.无法加载广告:3
firebase停止申请新广告.这意味着用户不会看到任何新广告(如果第一个请求以"无填充"结束,则甚至不会看到第一个广告).此外,如果应用程序进入后台然后前景(mAdView.resume()
正在调用),则仍然不会执行广告请求.这意味着"没有填充"的用户很长时间都看不到广告.这可以降低我的收入.
这是广告库的正确行为还是一个错误?如何解决这个问题?
更新
我有一个想法.移动mAdView.loadAd(adRequestBuilder.build())
从onCreate()
以onResume()
法力,当用户来自于背景回来重新加载广告.
@Override
public void onResume() {
if (!mAdView.isLoading())
mAdView.loadAd(adRequestBuilder.build());
mAdView.resume();
}
Run Code Online (Sandbox Code Playgroud)
有趣的是,大量的测试后,调用mAdView.loadAd(adRequestBuilder.build())
后No fill from ad server. Failed to load ad: 3
的力量重新加载广告(我得到的消息: …
我正在尝试实现调用Firebase远程配置fetch()
方法onStart()
.我认为这很容易,但经过几次尝试却没有.
首先,我想在用户打开应用程序并且超过缓存过期时间后立即检查新的配置值.这就是为什么我选择onStart()
方法来做到这一点.
起初我使用标准方法:
//called in Activity onStart() method
public static void fetchRemoteConfigValues(Activity activity) {
long cacheExpirationInSeconds = 43200L;
firebaseRemoteConfig.fetch(cacheExpirationInSeconds)
.addOnSuccessListener(activity, new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
LOGD(TAG, "onSuccess: Fetch Succeeded");
FirebaseRemoteConfig.getInstance().activateFetched();
}
})
.addOnFailureListener(activity, new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
LOGE(TAG, "onFailure: Fetch Failed", e);
}
});
}
Run Code Online (Sandbox Code Playgroud)
除非存在超出缓存过期时间并且没有因特网连接而onFailure
被调用的情况,否则一切都将正常工作.现在我的问题是:
几次fetch()调用之后没有互联网FirebaseRemoteConfigFetchException
接入FirebaseRemoteConfigFetchThrottledException
.现在,即使互联网再次可用,由于节流限制,我也无法从服务器获取数据.
我的临时解决方法是在调用fetch()之前检查Internet可用性:
public static void fetchRemoteConfigValues(Activity activity) …
Run Code Online (Sandbox Code Playgroud) 一周前,Norton Security开始在文件R.class中找到特洛伊木马(Trojan.Gen.NPE.2):
app\build\intermediates\transforms\instantrun\debug\folders\1\5\main\android\support\v4\r.class
和
app\build\intermediates\transforms\instantrunslicer\debug\folders\1\5\slice_2\android\support\v4\r.class
链接到virustotal.com扫描:https://www.virustotal.com/pl/file/282f4e09c102cd93c2f849c9fe9ed570188f5a03395ab84d2457a7c64d7acb1c/analysis/1499458308/
和代码:
package android.support.v4;
import com.android.tools.fd.runtime.IncrementalChange;
import com.android.tools.fd.runtime.InstantReloadException;
public final class R {
public static final long serialVersionUID = 830508538663712626L;
public R() {
IncrementalChange var1 = $change;
if(var1 != null) {
Object[] var10001 = (Object[])var1.access$dispatch("init$args.([Landroid/support/v4/R;[Ljava/lang/Object;)Ljava/lang/Object;", new Object[]{null, new Object[0]});
Object[] var2 = (Object[])var10001[0];
this(var10001, (InstantReloadException)null);
var2[0] = this;
var1.access$dispatch("init$body.(Landroid/support/v4/R;[Ljava/lang/Object;)V", var2);
} else {
super();
}
}
R(Object[] var1, InstantReloadException var2) {
String var3 = (String)var1[1];
switch(var3.hashCode()) {
case -1968665286:
super();
return;
case -71951640: …
Run Code Online (Sandbox Code Playgroud) 我有4个模块的项目:
我已将firebase正确设置为以下状态:https://firebase.google.com/docs/android/setup
在我的app模块中,我不使用任何其他库,只使用模块依赖:
dependencies {
debugCompile project(path: ':common-lib', configuration: 'debug')
releaseCompile project(path: ':common-lib', configuration: 'release')
}
Run Code Online (Sandbox Code Playgroud)
在我的common-lib模块中,我使用firebase库:
dependencies {
(...)
compile 'com.google.firebase:firebase-core:11.2.0'
compile 'com.google.firebase:firebase-crash:11.2.0'
compile 'com.google.firebase:firebase-messaging:11.2.0'
compile 'com.google.firebase:firebase-config:11.2.0'
compile 'com.google.firebase:firebase-ads:11.2.0'
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下项目编译,但我收到了消息:
google-services plugin could not detect any version for com.google.android.gms or com.google.firebase, default version: 9.0.0 will be used.
please apply google-services plugin at the bottom of the build file.
Run Code Online (Sandbox Code Playgroud)
当我将common-lib firebase依赖项复制到我的app模块时,消息消失了.
这是一个错误吗?我做错了吗?我的应用程序输出文件是否包含正确的11.2.0版本的firebase库,或者消息是否为9.0.0?
编辑
project build.gradle:
buildscript {
repositories …
Run Code Online (Sandbox Code Playgroud) android firebase google-play-services android-studio android-gradle-plugin
我有ViewPager
连接TabLayout
。如果我viewPager.setCurrentItem(position, true)
在选项卡布局上使用了正确的选项卡,则会显示(TabLayout
自动滚动到选定的选项卡)。但我想使用viewPager.setCurrentItem(position, false)
。在这种情况下,选择了正确的选项卡(突出显示),但问题是TabLayout
不会滚动到这个选定的选项卡。它是隐藏的,我必须手动滑动TabLayout
才能查看选择了哪个选项卡。这是一个错误吗?我可以手动强制TabLayout
滚动到选定的选项卡吗?
更新:
要清楚。我的选项卡已正确选择,并且在ViewPager
执行viewPager.setCurrentItem(position, true)
或时显示正确的视图viewPager.setCurrentItem(position, false)
。但是对于第二个,TabLayout
不滚动所以我选择的(突出显示)Tab
被隐藏了。
更新 2:
我已经用示例应用打开了这个问题:https : //issuetracker.google.com/issues/72390853
我正在使用自己BaseAdapter (standingsListAdapter)
的ListView (standingsLV)
.当我设置适配器时:
standingsLV.setAdapter(standingsListAdapter);
Run Code Online (Sandbox Code Playgroud)
getViewTypeCount()
叫做.但是后来,当我在适配器中设置新数据时:
standingsListAdapter.setData(data);
Run Code Online (Sandbox Code Playgroud)
在setData(data)
设置新数据调用之后notifyDataSetChanged()
:
public void setData(StandingsModelWrapper data) {
groupsData.clear();
if (data != null) {
groupsData.addAll(data.getModel());
}
notifyDataSetChanged();
}
Run Code Online (Sandbox Code Playgroud)
方法getViewTypeCount()不再被调用.为什么? 如何强制适配器再次检查getViewTypeCount()?
我为什么需要这个?
这就是为什么每次新数据到达列表适配器时都应该重新计算我的视图类型的数量.
我得到信号 11 (SIGSEGV),代码 1 (SEGV_MAPERR)本机崩溃。40 位用户受到影响(总共 153 份报告),在 60 天内有 40 万次活动安装。
更多信息:
backtrace:
#00 pc 0000000001e84914 /data/app/com.android.chrome-1/base.apk
#01 pc 0000000001e84900 /data/app/com.android.chrome-1/base.apk
Run Code Online (Sandbox Code Playgroud)
有趣的是,这个问题只发生在 Android 7.0 和 7.1 上