小编wwy*_*wyt的帖子

onDestroy()究竟是什么破坏了?

我一直被这个"特性"所困扰:当我使用Back按钮离开我的应用程序时,我可以告诉onDestroy()被调用,但是下次我运行我的应用程序时,Activity类的所有静态成员仍然保留它们的值.请参阅以下代码:

public class HelloAndroid extends Activity {

private static int mValue;   // a static member here

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    TextView tv = new TextView(this);
    tv.setText((mValue != 0) ? 
        ("Left-over value = " + mValue) : "This is a new instance");
    setContentView(tv);
}

public void onDestroy() {
    super.onDestroy();
    mValue++;
}
Run Code Online (Sandbox Code Playgroud)

}

上面的代码在mValue中显示剩余值,并在会话结束时递增,这样我就可以确定调用了onDestroy().

我在这个论坛上找到了一个有用的答案,我在上面的代码中理解mValue是一个类成员,而不是实例成员.但是,在这个特殊情况下,我只有一个HelloAndroid活动,所以当他去世时,一切都被清理干净,下次我回来时,一切都重新开始了,这不是真的吗?(或者,在onDestroy()之后,系统中还有其他一些神秘的东西仍然坚持它,这样它就不会死了吗?)

(上面只是一个变量,如果它是一堆对象引用怎么办?每个部分都是一个单独的可重新收集的内存.GC是否有机会收集其中一些而不是全部或者没有?这真的让我烦恼. )

android ondestroy

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

盗版,盗版,盗版.我能做什么?

我刚刚发布了一个应用程序,一个付费应用程序,4天后,用户告诉我,中国有另一个网站托管我的应用程序.我从那里下载了它,它在我的设备上运行正常!

这里有帖子说人们可以更改包名并重新发布apk.但这不是我的情况,破解版仍然使用相同的包名.我在程序中使用了Android Vending Licensing,但破解版本根本不进行许可检查.我使用ProGuard对其进行了模糊处理,但这并没有阻止黑客.

问题1:我根据Google的说明签署了apk文件.但是,他们仍然修改了代码并取出了许可检查部分.我错误的是签署一个apk文件旨在防止人们篡改文件内容?

问题2:对于Win32 .exe程序,我曾经使用校验和来确定文件是否已被更改.这是它的工作原理:当创建.exe时,我使用工具计算文件的字节内容之和,然后将其填充到文件中的某个位置,例如,文本模式"MY SIGNATURE"之后的4个字节.然后在运行时,程序打开.exe文件并计算字节总和,将其与签名后的整数进行比较.

有没有人在apk文件上尝试过这种方法?关心分享您的经历?

android piracy

24
推荐指数
2
解决办法
3368
查看次数

如何禁用AutoCompleteTextView的下拉显示?

我使用以下代码将文本设置为AutoCompleteTextView字段.但我注意到,当我将某些文本(不是所有文本,而是一些文本)设置为它时,它会自动弹出下拉列表.如果我不要求焦点,那会更好,但更好,不完全正确.我试过dissmissDropDwon(),它没有帮助.那么,有没有办法在设置文本并关注它后停止显示下拉?

actv.setText("Tim Hortons");
actv.setSelection(0, actv.getText().length());
actv.requestFocus();
actv.dismissDropDown();    // doesn't help
Run Code Online (Sandbox Code Playgroud)

谢谢!

android

16
推荐指数
6
解决办法
2万
查看次数

签署应用程序是否可以防止篡改文件?

我不熟悉签名文件的想法,到目前为止我找不到满意的答案,所以我想我最好问:

我想知道的是当签署二进制文件(对于Android)时,签名工具是否为文件分配了某种校验和,以便当黑客在apk文件中更改某些内容时,程序将拒绝启动,因为校验和不会不配.Android的签名工具中是否存在此机制?

好吧,我理解当黑客拥有二进制文件时,他可以禁用任何他想要的东西,包括校验和检查.但问题是:Android的签名工具是否首先提供此级别或保护?

感谢您的阅读和回答!

android

14
推荐指数
2
解决办法
3635
查看次数

Android的内部存储器可以映射到PC上的驱动器号吗?

当Android设备插入PC(通过USB?)时,内部文件系统是否映射到PC上的驱动器盘符?那么人们可以在Windows下复制文件到Android吗?

而且,Emulator可以模拟插入时的情况吗?怎么样?

先感谢您!

android

12
推荐指数
3
解决办法
5万
查看次数

如何从MotionEvent获取底层视图?

我的GestureListener类在onSingleTap()或onFling()等方法中接收MotionEvent.有没有办法确定此事件的基础视图?

背景:我有一个包含许多子视图的LinearLayout.此LinearLayout上有一个触摸侦听器,可以调用手势检测器.因此,当用户在任何子视图上执行手势时,LinearLayout的手势检测器将接收MotionEvent.但问题是,因为有很多孩子,我需要确切地知道用户使用了哪个孩子.但我找不到将坐标转换为视图的方法.有没有办法做到这一点?

一个丑陋的解决方案:动态添加孩子.因此,我可以将所有子项保留在列表中,然后当MotionEvent出现时,我可以遍历列表并查看该点是否在子项中.但我不喜欢这个想法.有没有更好的办法?

android

10
推荐指数
1
解决办法
4847
查看次数

关于序列化,serialVersionUID和不兼容的类

我在这里看到了一些相关的问题和答案,但它们似乎没有帮助.所以我想我需要在这里发一个单独的问题:

我有一个可序列化的类MyDataClass,它包含一些可序列化的内部类.我使用FileOutputStream和将其保存到文件中ObjectOutputStream.在阅读它时,我有时会得到一个例外(可能ClassNotFoundException或者InvalidClassException我不确定),并且异常的消息是这样的:

12-01 18:44:16.479: D/My App Name(534): ***** exception occurred 
com.xyz.myapp.lib.am; Incompatible class (SUID): com.xyz.myapp.lib.am: 
static final long serialVersionUID =3894560643019408205L; but expected 
com.xyz.myapp.lib.am: static final long serialVersionUID =-4215454881436014736L;
Run Code Online (Sandbox Code Playgroud)

MyDataClass 是这样的:

public static class MyDataClass implements Serializable {

    private static final long serialVersionUID = 0x98F22BF5;
    .....
    public boolean bNoTitle;
    public short syncOption;
    .....

    public class InnerClass implements Serializable {
        private static final long serialVersionUID = 0x99D32720;
        double premium;
        double interest;
    } …
Run Code Online (Sandbox Code Playgroud)

java android

9
推荐指数
1
解决办法
4079
查看次数

活动开始期间可序列化类的ClassNotFoundException

安装程序

我有一个只覆盖onCreate(),onResume()和onSaveInstanceState()的活动.在onSaveInstanceState()中,我放入了一个可序列化的对象:

    @Override 
    public void onSaveInstanceState(Bundle state) {
        super.onSaveInstanceState(state);
        state.putSerializable("obj", myObj); // myObj is of class MyClass               state.putLong("long", longVar);
    }
Run Code Online (Sandbox Code Playgroud)

MyClass最初是activity类中的内部类,但是对于调试,我甚至将它移动到一个单独的文件中:

public class MyClass implements Serializable {
    private static final long serialVersionUID = 0x98ED2F00;
     ....
}
Run Code Online (Sandbox Code Playgroud)

步骤:

  1. 以通常的方式启动程序,运行正常.
  2. 单击主页按钮返回启动器.
  3. 从Eclipse中,从"设备"面板停止该过程
  4. 从Launcher再次启动程序,这次我得到以下内容:

    java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.Reports}:java.lang.RuntimeException Parcelable遇到ClassNotFoundException读取可序列化对象{name = com.example.MyClass}

    引起:java.lang.ClassNotFoundException:加载器dalvik.System.PathClassLoader [.]中的com.examp.MyClass

线索和观察:

  1. 最重要的线索是:如果我没有在onSaveInstanceState()中保存myObj,那么一切都很好.并且,将任何原始类型放入Bundle中都很好,但不是我的对象.

  2. 异常抛出我的代码之外,它发生在onCreate()和onResume()之间.它发生在Android内部.

  3. 错误消息中的类名是正确的:com.example.MyClass.最初它是活动内部的一个内部类,但是为了隔离问题,我把它移到一个单独的文件中,但无济于事.

  4. 我相信Serializable的实现是正确的,因为它可以序列化到程序的其他部分的文件中.

有没有人知道这可能的原因?非常感激!(对不起,我不能在这里放置详细的代码,因为一切都在这里和那里交织在一起.我只能尽可能地隔离.)

android

5
推荐指数
1
解决办法
3269
查看次数

如何删除 AutoCompleteTextView 中使用的 ArrayAdapter 上的过滤器?

作为标题,如何删除 AutoCompleteTextView 使用的 ArrayAdapter 上的过滤以获取原始列表?

多一点背景:

这一切都始于一个可悲的事实,即传递给 onItemClick() 的“位置”值是无用的。“位置”是指数组被过滤后的位置,但我需要知道它的真实位置。所以,我想要做的是当我获得所选项目的文本时(通过使用 getItemAtPosition(position)),我将它与支持 ArrayAdapter 的原始字符串数组一一比较。但是,我发现在调用 onItemClick() 时,适配器已经被过滤了,我无法再访问原始数组。所以我想如果我可以删除过滤器,也许我可以找回原始数组并在其中查找所选项目。

ArrayAdapter<String> mAdapter;

public void onCreate() {

    // Create an adapter and remembere it as a class member.
    mAdapter = new ArrayAdapter<String>(this, layoutId);

    // Add 100 strings to it and attach it to an AutoCompleteTextView
    for (int i = 0; i < 100; i++)
        mAdapter.add("random text");
    ((AutoCompleteTextView)findViewById(id)).setAdapter(mAdapter);
}

@Override
public void onItemClick(AdapterView<?> actv, View view, int position, long id) {

    if (actv.getAdapter().equals(mAdapter))
        Log.d("The adapter contained in actv …
Run Code Online (Sandbox Code Playgroud)

android

5
推荐指数
1
解决办法
6512
查看次数

代码签名究竟如何帮助软件发布商?

我刚刚完成了我的应用程序首次代码签名,感谢Jeff Wilcox博客的帮助,他的分步说明,我能够在不到36小时内完成整个过程.但现在我开始想知道为什么我花了这笔钱,因为我无法看到它如何帮助软件发行商:

  1. 有黑客试图通过逆向工程和修改代码来打破程序中的保护机制.但是签名文件并不能防止这种情况发生,他们仍然可以随意修改文件的内容.

  2. 有时一些反病毒程序可能会错误地认为我的.exe文件包含病毒.对文件进行签名也无济于事.

  3. 代码签名只能告诉用户这个文件来自我,但他们仍然不知道我是好人还是坏人.所以它对用户也没有帮助.

我的结论是代码签名不是为了帮助软件发行商或用户.它只试图跟踪文件来自何处,如果它包含病毒,人们就知道是谁种植了它,就是这样!(只有当黑客无法将病毒捎带到签名的.exe文件中时才会这样.)

我的问题是:我的理解是否正确?还是我错过了什么?谢谢.

code-signing

5
推荐指数
1
解决办法
339
查看次数

标签 统计

android ×9

code-signing ×1

java ×1

ondestroy ×1

piracy ×1