zjupure

zjupure 查看完整档案

填写现居城市  |  填写毕业院校  |  填写所在公司/组织填写个人主网站
编辑

若是无缘再见,白堤柳帘垂泪好几遍。

个人动态

zjupure 回答了问题 · 2017-12-29

Android progressdialog 源码中的oncreate函数是在什么时候调用的?

Dialog的show()方法会调用其onCreate()方法,ProgressBar是android系统类,
如果断点调试没有执行, 可能原因

  1. compileSdk版本和真机系统版本不一致,源码存在差异,无法正确断点。
  2. compileSdk版本和真机系统版本一致,可能厂商定制修改了该类,也会造成源码位置错乱,无法正确断点。

关注 2 回答 1

zjupure 回答了问题 · 2017-12-29

Android View属性动画实现放大效果出现的问题!!

这个需要修改View动画变换的基准点pivotX和pivotY,View默认的基准点是其中心,对于你的需求,保持底部不变,X和Y方向放大,需要将基准点设置为View底边的中点。

view.setPivotX(view.getWidth()/2);  // X方向中点
view.setPivotY(view.getHeight());   // Y方向底边
AnimatorSet animatorSet = new AnimatorSet();  //组合动画
ObjectAnimator scaleX = ObjectAnimator.ofFloat(view, "scaleX", 0f, 1.6f);
ObjectAnimator scaleY = ObjectAnimator.ofFloat(view, "scaleY", 0f, 1.6f);
animatorSet.setDuration(2000);  //动画时间
animatorSet.setInterpolator(new DecelerateInterpolator());  //设置插值器
animatorSet.play(scaleX).with(scaleY);  //同时执行
animatorSet.start();  //启动动画

关注 3 回答 2

zjupure 回答了问题 · 2017-12-25

能否在一个第三方的APK中,修改一下JS代码,然后重新打包?多谢

APK是一个zip包,asset文件夹会原封不动的保留,不参与arsc和R文件的生成,可以直接解压替换该目录下任意文件,然后进行重新打包签名运行,只要apk没有在运行时做一些校验,就可以得到你想要的结果。

关注 9 回答 7

zjupure 回答了问题 · 2017-12-20

解决Android8.0 悬浮窗申请权限成功但崩溃

在声明SYSTEM_ALERT_WINDOW 权限后,选择使用TYPE_SYSTEM_ALERT等来使弹窗显示在其他应用之上;在Android O系统上都将显示在TYPE_APPLICATION_OVERLAY类型的窗口之下。而targetSdkVersion为android O的应用直接使用TYPE_APPLICATION_OVERLAY显示Alter Window。这样你的弹框可能还是在别人的弹窗之下。

适配Android 8.0,请使用TYPE_APPLICATION_OVERLAY弹出悬浮窗,需要申请权限。

关注 4 回答 3

zjupure 回答了问题 · 2017-12-15

解决okhttp的字节缓存策略segment的问题

回去翻了一下okio的源码,Segment的shared和owner属性是互斥的,当对Segment2进行split时,如果Segment2被share了,会创建一个新的Segment共享原来的Segment2,这个Segment是处于shared状态且owner不是自己,链变成了
Segment1[30%]--->Segment2N(shared)[20%]--->Segment2(old)[40%]--->Segment3[10%]
其中Segment2N和Segment2(old)内部持有的byte[]数组对象是同一个,只是pos和limit位置不同,这就是shared状态,而Segment1和Segment3不是share状态,内部都是有各自的byte[]数组。

当遍历到Segment2N时,发现Segment2N和它的prev Segment1满足compact条件,就会compact Segment1和Segment2,把Segment2N里的数据写入Segment1里,然后把自身从链表中移除。
Segment1[50%]--->Segment2(old)[40%]--->Segment3[10%]

当遍历到Segment2(old)时,发现Segment2(40%)和Segment1(50%)都没有超过一半,满足compact条件,又会把Segment2(old)的数据写入Segment1里,把自身移除,释放内存。
Segment1[90%]--->Segment3[10%]

当遍历到Segment3时,不满足compat条件,没有必要拷贝数据,do nothing。

关注 2 回答 1

zjupure 回答了问题 · 2017-12-11

Android 关于armeabi和armeabi-v7a的so库问题

Android不同版本so的拷贝策略不同,多个ABI下面的so不同,系统在安装app时可能会发生拷贝so缺失的现象,运行时会发生找不到so的崩溃,参考https://zhuanlan.zhihu.com/p/...
建议有必要保留的ABI目录下的so数目保持一致。

关注 3 回答 2

zjupure 回答了问题 · 2017-12-11

解决大家有没有遇到过只在 Android 7.1 机型上报告的由Toast引起的BadTokenException错误?

这个问题由于targetSDKVersion升到26之后,在7.1.1机型上概率性出现。稳定复现的步骤是,在Toast.show()之后,UI线程做了耗时的操作阻塞了Handler message的处理,如使用Thread.sleep(5000),然后这个崩溃就出现了。原因是7.1.1系统对TYPE_TOAST的Window类型做了超时限制,绑定了Window Token,最长超时时间是3.5s,如果UI在这段时间内没有执行完,Toast.show()内部的handler message得不到执行,NotificationManageService那端会把这个Toast取消掉,同时把Toast对于的window token置为无效。等App端真正需要显示Toast时,因为window token已经失效,ViewRootImpl就抛出了上面的异常。
Android 8.0上面,google意识到这个bug,在Toast的内部加了try-catch保护。目前只有7.1.1上面的Toast存在这个问题,崩溃在系统源码里。APP层可以通过自定义Toast类,反射替换TN的内部成员变量mHandler,从而添加try-catch做到workaround,所有使用Toast的地方都使用这个自定义的,不要直接使用系统原生的。

关注 7 回答 4

zjupure 关注了问题 · 2017-01-23

解决android中动态添加点击方法时调用类变量的问题

我在前面定义了一个类变量
public int arrBomb[][] = new int10;

然后给一个动态添加的按钮,绑定了点击方法
Button btn = new Button(this);
btn.setBackgroundResource(R.drawable.bg);
btn.setTag(R.id.row,row);
btn.setTag(R.id.col,col);
//点击事件
btn.setOnClickListener(clickListener);
grid.addView(btn, params);

接着,发现在clickListener方法里使用不了arrBomb这个变量,请问是怎么回事呢?
public View.OnClickListener clickListener = new View.OnClickListener() {

    public void onClick(View v) {
        GridLayout grid = (GridLayout)findViewById(R.id.main);
        Button btn = (Button)v;
        int row = (int)btn.getTag(R.id.row);
        int col = (int)btn.getTag(R.id.col);
        grid.removeView(btn);
        Log.d("AAA",row + "===" + col);
    }
};

应该要如何使用呢?谢谢,本人是安卓菜鸟。

关注 2 回答 1

zjupure 回答了问题 · 2017-01-23

解决android中动态添加点击方法时调用类变量的问题

arrBomb和clickListener只要在同一个类中声明,onClick()中是可以引用arrBomb的,所以并不清楚你具体的写法和上下文环境。
tips:

  1. java中声明二维数组,一般把int[][]连在一起。

  2. int[][] arrBomb = new int[10][];

  3. 你可以直接用Activity或Fragment实现View.onClickListener接口,没有必要申明一个变量。

关注 2 回答 1

zjupure 回答了问题 · 2017-01-22

解决android gridlayout动态多行多列的问题

  1. 按钮之间有margin,这是由系统Button默认的style引起的。Button默认的style的背景图是一个insetDrawable,四周有留白。为了解决留白问题,你可以自己给Button设置一个background,这样就可以消除间隙了。

  2. GridLayout与GridView不同,它只负责子控件的位置摆放,不负责记录子控件的位置信息和点击事件的分发。这个需要你自己对每个子控件进行单独监听。
    为了获取子控件在GridLayout中的位置,看你的代码是动态生成的,不是通过xml文件配置,你可以在生成子控件的时候通过View.setTag()把自身的位置信息绑定到控件上,在onClick()事件中通过View.getTag()获取位置信息。

希望对你有所帮助。

关注 4 回答 3

认证与成就

  • 获得 21 次点赞
  • 获得 1 枚徽章 获得 0 枚金徽章, 获得 0 枚银徽章, 获得 1 枚铜徽章

擅长技能
编辑

(゚∀゚ )
暂时没有

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 2016-10-30
个人主页被 586 人浏览