小编All*_*son的帖子

Chrome自定义标签中检测到内存泄漏

我正在尝试通过LeakCanary实施Chrome自定义标签并检测内存泄漏.

演示应用程序不会出现泄漏,除非我们添加另一个活动层(即MainActivity发射Activity2,结合/解除绑定到自定义选项卡服务并启动URL -一切MainActivity确实在演示应用程序).

MainActivity看起来像这样:

public class MainActivity extends Activity implements OnClickListener {
    private Button mLaunchButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        LeakCanary.install(getApplication());

        setContentView(R.layout.main);

        mLaunchButton = (Button) findViewById(R.id.launch_button);
        mLaunchButton.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        int viewId = v.getId();

        if (viewId == R.id.launch_button) {
            Intent intent = new Intent(getApplicationContext(), Activity2.class);
            startActivity(intent);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

从返回Activity2MainActivity将导致此泄漏:

09-04 13:49:26.783  10456-12161/org.chromium.customtabsclient.example D/LeakCanary? In org.chromium.customtabsclient.example:1.0:1.
09-04 13:49:26.783  10456-12161/org.chromium.customtabsclient.example D/LeakCanary? * org.chromium.customtabsclient.Activity2 …
Run Code Online (Sandbox Code Playgroud)

android memory-leaks google-chrome chrome-custom-tabs

12
推荐指数
2
解决办法
2035
查看次数

适用于 Android 的 Canny 边缘检测器 -- 递归函数上的 StackOverflow

我正在开发适用于 Android 的增强现实应用程序。我正在实现 Tom Gibara 的精明边缘检测器类,并用 Bitmap 替换了 Android 不支持的 BufferedImage。

方法“跟随”(在下面发布)导致我出现 StackOverflow 错误。这是一个递归函数,但让我感到困惑的是,它会在设备上崩溃前正常工作大约 10-15 秒。

从 Google 看来,人们似乎已经在 J​​ava 中成功实现了这个类,但我想知道,无论出于何种原因,它在 Android 上都不起作用。Gibara 的代码指定它仅供单线程使用;这可能是问题的一部分吗?如果不是这样,我的错误对任何人来说都是显而易见的吗?

谢谢!

private void follow(int x1, int y1, int i1, int threshold) {  
    int x0 = x1 == 0 ? x1 : x1 - 1;  
    int x2 = x1 == width - 1 ? x1 : x1 + 1;  
    int y0 = y1 == 0 ? y1 : y1 - 1;  
    int y2 = y1 …
Run Code Online (Sandbox Code Playgroud)

java stack-overflow android edge-detection

5
推荐指数
0
解决办法
3535
查看次数

Android - 如何“摇动擦除”?

这可能是一个简单的问题,但我被卡住了。我正在尝试在绘图程序(简单的绘画应用程序)中实现“摇动擦除”功能。我无法让它工作。这是我的代码:

private final SensorEventListener mSensorListener = new SensorEventListener() {

        public void onSensorChanged(SensorEvent se) {
          float x = se.values[0];
          float y = se.values[1];
          float z = se.values[2];
          mAccelLast = mAccelCurrent;
          mAccelCurrent = (float) Math.sqrt((double) (x*x + y*y + z*z));
          float delta = mAccelCurrent - mAccelLast;
          mAccel = mAccel * 0.9f + delta; // perform low-cut filter

          if (mAccel > 2) {    
              mView.onDraw(mCanvas);
              mCanvas.drawBitmap(cache, 0, 0, new Paint(Paint.DITHER_FLAG));
          }
        }

        public void onAccuracyChanged(Sensor sensor, int accuracy) {
        }
      };
Run Code Online (Sandbox Code Playgroud)

SensorEventListener 基于此示例 …

android canvas paint shake

5
推荐指数
0
解决办法
1686
查看次数

Android:自定义图库 setSelection() 问题

我有一个扩展的 BaseAdapter,它的 LinearLayout 子项(每个子项中有一个 ImageView 和一个 TextView)连接到自定义图库。

当我第一次启动我的活动时,我想调用setSelection(position)使 ImageView 将其选择器更改为“选定”图像。一旦我在随后选定的孩子上扔画廊,这就会起作用,但不是第一次启动应用程序。

我的选择器:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" 
    android:drawable="@drawable/home_image_select" /> 
<item android:state_selected="false" 
    android:drawable="@drawable/home_image" /> 
</selector>
Run Code Online (Sandbox Code Playgroud)

我的第一个猜测是在调用 setSelection() 之后在适配器上调用 notifyDataSetChanged(),我尝试这样做:

((CustomAdapter) gallery.getAdapter()).notifyDataSetChanged();
Run Code Online (Sandbox Code Playgroud)

那没有任何作用。我还尝试覆盖 Gallery 类的 setSelection() 来执行此操作:

View v = this.getAdapter().getView(position, null, this);       
((ImageView) v.findViewById(R.id.gallery_image)).setSelected(true);
Run Code Online (Sandbox Code Playgroud)

那也行不通。有什么我想念的或可以尝试的吗?

java android android-widget android-gallery android-adapter

5
推荐指数
0
解决办法
1568
查看次数

GAE 中 SUDS 的 AttributeError

我正在尝试通过 Google App Engine 在 Python 项目中包含 SUDS 库。

我的代码尝试以下操作:

from suds.client import Client
from suds.wsse import *
Run Code Online (Sandbox Code Playgroud)

而且,一旦我在 GAE 上进行部署,就会遇到以下错误:

File ".../myfile.py", line 13, in <module>
from suds.client import Client

File ".../suds/__init__.py", line 154, in <module>
import client

File ".../suds/client.py", line 25, in <module>
import suds.metrics as metrics

AttributeError: 'module' object has no attribute 'suds'
Run Code Online (Sandbox Code Playgroud)

我已经环顾了一段时间,似乎 SUDS 可以与 GAE 一起使用。我添加了概述的修复程序此处,但这似乎不是问题。似乎 App Engine 甚至还没有达到这一点。

任何信息或建议?

我使用的是 Python 2.7 和 SUDS 0.4。

python google-app-engine suds

5
推荐指数
0
解决办法
595
查看次数

在removeView之后管理LayoutTransition的ViewGroup的z顺序

我正在使用LayoutTransition带有自定义ObjectAnimator对象的动画来添加和删除内部LinearLayout(本身在中HorizontalScrollView)的视图。新视图将添加到先前视图的右侧。唯一具有动画效果的属性是translationX

我希望一个新加入的人View从前一个人的下方滑出View(从左到右动画)。而且,我希望新删除的对象View在上一个对象的下方滑动View(从右到左动画)。

我覆盖了getChildDrawingOrder以返回相反的z顺序,如下所示:

@Override
protected int getChildDrawingOrder( int childCount, int i ) {
   return childCount - 1 - i;
}
Run Code Online (Sandbox Code Playgroud)

这对于添加视图时发生的动画非常有用。删除视图后,它不起作用。removeView()被称为getChildDrawingOrder(); 的ViewGroup(或者,在我的情况,LinearLayout)不再知道该新除去View通过它得到搞清楚Z顺序的时间。结果是被移除的View动画在其他视图之上。

bringToFront()并且bringChildToFront()似乎为我做什么。

我知道我可以简单地翻译View要删除的,然后致电removeView()。但这违反了使用LayoutTransitions的目的。

我还能尝试什么,以确保移除a View仍然保持我想要的z顺序?

android android-animation android-layout

5
推荐指数
0
解决办法
301
查看次数