我有一个简单的ListActivity,显示图像和我inizialize我OkHttpClient为毕加索生成器在ImageAdapter类的构造函数:
picassoClient = new OkHttpClient();
picassoClient.interceptors().add(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request newRequest = chain
.request()
.newBuilder()
.addHeader("Cookie","xyz")
.build();
return chain.proceed(newRequest);
}
});
new Picasso.Builder(context).downloader(new OkHttpDownloader(picassoClient)).build();
Run Code Online (Sandbox Code Playgroud)
然后在getView()我使用Picasso在ImageView中加载图像:
Picasso.with(context).load(xyzUrl).fit().centerCrop().into(vImage);
Run Code Online (Sandbox Code Playgroud)
它运行良好,但在设备的旋转中,我看到堆大小有时会慢慢增长,有时很快,有时会保持稳定.它很少掉落.我是在泄漏内存还是在代码中出现了问题?
编辑:
我在Picasso的电话中插入了这段代码getView()
if (BuildConfig.DEBUG) {
Log.i("HEAP SIZE",
String.valueOf((Runtime.getRuntime().totalMemory() / 1024)
- (Runtime.getRuntime().freeMemory() / 1024)));
}
Run Code Online (Sandbox Code Playgroud)
我发现堆大小的增长发生在getView()后加载位图到ImageView中.怎么了?
编辑2:尝试设置静态ImageAdapter,没有任何变化
编辑3:
尝试使用RecyclerView而不是ListView,行为相同:堆大小不断增长,同时滚动图像列表每次步进30-40个字节onBindViewHolder().设备的旋转堆大小有时会增加甚至2-3兆字节.很少下降.
为什么堆大小缓慢但持续增长?为什么我在设备轮换后泄漏一些缓存或一些缓存的位图?
更新:
尝试了没有构造函数中的代码的适配器(没有new OkHttpClient和new Picasso.Builder),它工作,堆大小现在保持稳定.那么,使用cookie头管理初始化客户端的正确方法是什么? …
在Android SDK Manager中,我无法找到API级别为25的Google API.因此,我无法将compileSdkVersion设置为"Google Inc.:Google API:25".我在我的应用程序中使用MapActivity,并且由于不兼容的sdk版本,com.google.android不受支持.有没有其他方法可以在没有Google API的情况下使用它?
android google-maps google-api android-studio android-developer-api
如何使用AppCompat-v7(v21)更改ActionBar中动画ActionBarDrawerToggle图标的颜色?我尝试过这个,但是没有用.谢谢.
myActionBarActivity.java
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mLeftDrawer = (LinearLayout) findViewById(R.id.left_drawer);
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
R.string.drawer_open, R.string.drawer_close)
Run Code Online (Sandbox Code Playgroud)
价值观/ styles.xml
<item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
Run Code Online (Sandbox Code Playgroud)
<style name="DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle">
<item name="spinBars">true</item>
<item name="color">@android:color/black</item>
</style>
Run Code Online (Sandbox Code Playgroud)
更新:解决了,<item name="actionBarWidgetTheme">我的主题中有这个条目可能重叠 <item name="drawerArrowStyle">.我删除了它,现在一切正常.
我不了解WindowInsets rects,因为docs说:
系统窗口插图表示全屏窗口的区域,该区域被状态栏,导航栏,IME或其他系统窗口部分或完全遮盖.
因此,多个WindowInsets可以在每个都有自己的rect(一个用于状态栏,另一个用于导航栏......),我该如何检索它们?
或者是有只有一个WindowInsets和它的左顶右底坐标是该应用的可用窗口的矩形?
将依赖关系声明为
compile 'com.google.firebase:firebase-messaging:9.4.0'
Run Code Online (Sandbox Code Playgroud)
我在活动的导入行中收到"无法解析符号GoogleApiAvailability"消息
import com.google.android.gms.common.GoogleApiAvailability;
Run Code Online (Sandbox Code Playgroud)
怎么了?
检查我的应用程序的M预览版设备上的行为,似乎它的前景(有活动通知)服务播放音乐不会影响打盹模式.但是阅读文档似乎只能从AppStandby中免除前台服务.
什么是真正的规则?
我有当前的设置:
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/coordiator_layout_in_main"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/actionBarSize"
app:layout_scrollFlags="scroll|enterAlways"/>
</android.support.design.widget.AppBarLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<android.support.design.widget.NavigationView
android:layout_width="170dp"
android:layout_height="match_parent"
android:fitsSystemWindows="true"/>
<FrameLayout
// I place a fragment containing a viewpager containing fragments that contain a recyclerview....
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_toRightOf="@+id/nav_view">
</FrameLayout>
</RelativeLayout>
<FrameLayout
android:id="@+id/settings_frame"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="invisible">
</FrameLayout>
<android.support.design.widget.FloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_refresh"
app:layout_anchor="@id/coordiator_layout_in_main"
app:layout_anchorGravity="bottom|right|end"
app:layout_behavior="com.material.widget.MyFloatingActionButtonBehavior" />
</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)
现在一切都按预期工作,如果我在包含片段的framelayout内滚动,工具栏可以根据需要滑入和滑出
现在重点是,如果我滚动位于framelayout侧面的NavView(以及relativelayout内部),我想禁用工具栏滑入和滑出
但无论我是否删除所有滚动行为,工具栏都会继续滑入和滑出(只有禁用它的方法是从appbarlayout中移除滚动标记,但禁止所有滑入和滑出tolbar)
请问我在这里错过了什么?是不是应该将滚动事件传递给CoordinatorLayout的scolling行为?
android android-design-library androiddesignsupport android-coordinatorlayout android-appbarlayout
offsetChildAsNeeded在运行滚动更改时,我会在AppBarLayout.ScrollingViewBehavior中观察该方法的数学流程.
由于它是私有方法和私有方法mOffsetDelta,如何以编程方式监视它们?
(目前尚不清楚该方法是如何使用的offset.)
private void offsetChildAsNeeded(CoordinatorLayout parent, View child, View dependency) {
final CoordinatorLayout.Behavior behavior =
((CoordinatorLayout.LayoutParams) dependency.getLayoutParams()).getBehavior();
if (behavior instanceof Behavior) {
// Offset the child, pinning it to the bottom the header-dependency, maintaining
// any vertical gap, and overlap
final Behavior ablBehavior = (Behavior) behavior;
final int offset = ablBehavior.getTopBottomOffsetForScrollingSibling();
ViewCompat.offsetTopAndBottom(child, (dependency.getBottom() - child.getTop())
+ ablBehavior.mOffsetDelta
+ getVerticalLayoutGap()
- getOverlapPixelsForOffset(dependency));
}
}
Run Code Online (Sandbox Code Playgroud)
注意:欢迎,也可以接受回复那些解释数学的逻辑getTopBottomOffsetForScrollingSibling(),和(dependency.getBottom() - child.getTop()),和内容的细节mOffsetDelta
我在Activity类中初始化一个成员变量
private String test = new String("A");
Run Code Online (Sandbox Code Playgroud)
然后我用它来编写一个长时间消耗循环的doInBackground()方法,从Activity中启动一个匿名的AsyncTask
new AsyncTask<Void, Void, Void>() {
@Override
protected void onPreExecute() {
}
@Override
protected void onPostExecute(Void result) {
}
@Override
protected Void doInBackground(Void... params) {
for (int j = 10; j >= 0; j--) {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Log.i("DOINBACKGROUND ", test);
}
}.execute();
Run Code Online (Sandbox Code Playgroud)
问:当我离开,而活动Asynctask仍在执行,而活动的后onDestroy()执行,我在日志中看到的成员变量仍然活着,并且不被破坏.有人可以向我解释这有可能吗?
BOUNTY QUESTION:成员变量仍然存在,因为即使之后onDestroy(),由于gc标准和gc优先级,它还没有被使用.还行吧.
但我怀疑是否
doInBackground()而不会崩溃(尽管有临时内存消耗)或者相反
TabLayout设置有ViewPager,有很多标签MODE_SCROLLABLE和keyline app:tabContentStart="72dp".
当用户选择选项卡时,TabLayout尝试将所选选项卡滚动到中心.我希望选中的选项卡与keyline保持对齐,而不是居中.可能吗?
Android设计支持库v22.2.0.
android android-design-library androiddesignsupport android-tablayout
android ×9
android-view ×1
firebase ×1
google-api ×1
google-maps ×1
java ×1
listadapter ×1
okhttp ×1
picasso ×1
scope ×1