在有效的Android HTTP中, Jesse Wilson提到了以下内容:
提供图像等静态资源?使用永久URL并让它永远缓存
我正在使用Picasso和一个特定的OkHttp实例来获取和缓存图像.我想知道如何设置let it cache forever
策略?
我只能考虑Cache-Control: max-stale=
用尽可能高的值覆盖HTTP缓存控制头max-stale(),还有另一种(更好的)方法吗?
我正在使用Otto 1.3.3,当我恢复我的应用程序时,我有时会得到IllegalArgumentException
以下堆栈跟踪:
Caused by: java.lang.IllegalArgumentException: Producer method for type class
com.couchsurfing.mobile.ui.setup
.SessionProviderFragment$SessionConnectionStateChangeEvent found on
type class com.couchsurfing.mobile.ui.setup.SessionProviderFragment,
but already registered by type class
com.couchsurfing.mobile.ui.setup.SessionProviderFragment.
at com.squareup.otto.Bus.register(Bus.java:194)
at com.couchsurfing.mobile.ui.BaseRetainedFragment
.onCreate(BaseRetainedFragment.java:20)
Run Code Online (Sandbox Code Playgroud)
该SessionProviderFragment
有它的实例保留,请找扩展的类如下所示:
public abstract class BaseRetainedFragment extends SherlockFragment {
@Inject
Bus bus;
@Override
public void onCreate(final Bundle state) {
super.onCreate(state);
((CouchsurfingApplication) getActivity().getApplication()).inject(this);
setRetainInstance(true);
bus.register(this);
}
@Override
public void onDestroy() {
super.onDestroy();
bus.unregister(this);
bus = null;
}
}
Run Code Online (Sandbox Code Playgroud)
我试过使用bus.register(this)
in onAttach()
或者onCreate()
没有改变这个问题.
我使用Robolectric 2.x(我实际上使用2.1)与使用APKLIB的Android Maven项目有问题.
它接缝Robolectric 2.x期望在project.properties中引用Android库(此文件由Intellij或Eclipse自动填充).
在开发环境中使用Maven时工作正常,但是如果我想在CI服务器(Jenkins)上构建我的Android Maven项目,我的构建失败了:
java.lang.RuntimeException: huh? can't find parent for StyleData{name='Theme_Abs_cs', parent='@style/Theme_Sherlock_Light'}
显然Robolectric找不到Android库依赖项.
有没有人使用Android APKLIB + Jenkins + Maven + Robolectric 2.x进行配置?
我对构建本机和基于 WebView 的 Android 屏幕感兴趣。我希望在从本机屏幕导航到 WebView 屏幕时保持用户登录状态。但我不知道如何实现这一目标。
我正在使用LeakCanary 1.3.1-SNAPSHOT.我发现有关ViewTreeObserver.OnScrollChangedListener
设置的泄漏,我修复了它,如下面的代码:
private ViewTreeObserver.OnScrollChangedListener scrollViewChangeListener;
@Override protected void onFinishInflate() {
super.onFinishInflate();
ButterKnife.inject(this);
scrollViewChangeListener = new ViewTreeObserver.OnScrollChangedListener() {
@Override public void onScrollChanged() {
EventDetailsView.this.onScrollChanged(scrollView.getScrollY());
}
};
scrollView.getViewTreeObserver()
.addOnScrollChangedListener(scrollViewChangeListener);
}
@Override public void onDetachedFromWindow() {
super.onDetachedFromWindow();
scrollView.getViewTreeObserver().removeOnScrollChangedListener(scrollViewChangeListener);
}
Run Code Online (Sandbox Code Playgroud)
然而,LeakCanary仍然将其报告为泄漏,任何想法为什么?
* com.couchsurfing.mobile.ui.events.detail.EventDetailsScreen$Presenter has leaked:
* GC ROOT android.view.inputmethod.InputMethodManager$1.this$0 (anonymous class extends com.android.internal.view.IInputMethodClient$Stub)
* references android.view.inputmethod.InputMethodManager.mCurRootView
* references com.android.internal.policy.impl.PhoneWindow$DecorView.mAttachInfo
* references android.view.View$AttachInfo.mTreeObserver
* references android.view.ViewTreeObserver.mOnScrollChangedListeners
* references android.view.ViewTreeObserver$CopyOnWriteArray.mData
* references java.util.ArrayList.array
* references array java.lang.Object[].[0]
* references com.couchsurfing.mobile.ui.events.detail.EventDetailsView$1.this$0 (anonymous class implements android.view.ViewTreeObserver$OnScrollChangedListener) …
Run Code Online (Sandbox Code Playgroud) 我有一个扩展CoordinatorLayout的自定义视图,我正在重写onRestoreInstanceState
并onSaveInstanceState
使用扩展BaseSavedState的类的典型方法.当我的观点恢复后,我得到:
Caused by: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: android.support.design.widget.CoordinatorLayout$SavedState
at android.os.Parcel.readParcelableCreator(Parcel.java:2432)
at android.os.Parcel.readParcelable(Parcel.java:2358)
at android.view.AbsSavedState.(AbsSavedState.java:57)
at android.view.View$BaseSavedState.(View.java:21457)
at android.support.design.widget.CoordinatorLayout$SavedState.(CoordinatorLayout.java:2656)
如果我评论我的两个方法onRestoreInstanceState
,onSaveInstanceState
这个问题就解决了.请参阅以下自定义视图代码
@Override
protected Parcelable onSaveInstanceState() {
Parcelable superState = super.onSaveInstanceState();
SavedState ss = new SavedState(superState);
ss.scrollX = scrollView.getScrollX();
ss.scrollY = scrollView.getScrollY();
return ss;
}
@Override
protected void onRestoreInstanceState(Parcelable state) {
if (!(state instanceof SavedState)) {
super.onRestoreInstanceState(state);
return;
}
final SavedState ss = (SavedState) state;
super.onRestoreInstanceState(ss.getSuperState());
post(() -> scrollView.scrollTo(ss.scrollX, ss.scrollY));
} …
Run Code Online (Sandbox Code Playgroud) 我正在使用Ant> 1.8 + Proguard 4.6来构建我的Android项目,并且在构建过程中我遇到了异常:
SimException:本地0000:无效
请在下面找到所有构建日志:
Buildfile: build.xml
[setup] Android SDK Tools Revision 11
[setup] Project Target: Android 3.1
[setup] API level: 12
[setup] ------------------
[setup] Resolving library dependencies:
[setup] No library dependencies.
[setup] ------------------
[setup] WARNING: Attribute minSdkVersion in AndroidManifest.xml (4) is lower than the project target API level (12)
-set-release-mode:
-release-obfuscation-check:
-pre-build:
-dirs:
[echo] Creating output directories if needed...
-aidl:
[echo] Compiling aidl files into Java classes...
-renderscript:
[echo] Compiling RenderScript files into Java classes and RenderScript …
Run Code Online (Sandbox Code Playgroud) android ×7
ant ×1
exception ×1
http ×1
http-caching ×1
jenkins ×1
leakcanary ×1
maven ×1
okhttp ×1
otto ×1
picasso ×1
proguard ×1
robolectric ×1