小编net*_*ein的帖子

Android:保存Application Singleton Class中存储数据的最佳方法

保存Android应用程序的应用程序类(单例)中存储的数据的最佳方法是什么?

我有一个安静的大应用程序,在活动之间共享大量数据.因此大部分都存储在Application Singleton上.

这一切都很有效.. util应用程序被内存不足的操作系统杀死...然后当它返回时,它会尝试恢复活动而没有成功,因为缺少必须在Application上的数据.

由于缺乏一种非常欣赏(和需要)的方法来根据您的经验在应用程序上保存数据,哪种方法最好?

我可以保存一些东西,除了"正常"字符串,布尔值等,比如Bitmaps?

我已经看到了如何在Android中声明全局变量?但问题并不是关注在这种情况下重要的是什么,如何在应用程序因内存不足而被杀死时保存数据......

android application-singleton

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

在缓存图像和数据时,您应该使用内部存储还是外部存储?

在内部/外部存储中读过这个Android保存应用程序设置/数据,但我不认为我真的得到了答案.

我正在开发一个应用程序,我应该存储一些"缓存"数据,如十几个图像和一些字符串(json).

最初我将所有这些存储在SD卡上(外部存储)但后来我认为这可能会被SDCard弃用在最近的设备中弃用.

读了一下之后,我明白外部存储不仅仅是SD卡,而是"可移动存储介质(如SD卡)或内部(不可移动)存储",所以不应该弃用但是......它是共享的空间,并没有存储在那里的文件的所有权,所以第一个问题是我删除应用程序时无法删除它们.

所以我改为内部存储,以避免文件/图像"公开",并在删除应用程序后删除它们.

这是推荐的方法吗?

对于内存较低但SD卡空间较大的设备,这是一种很好的方法吗?

我的应用程序支持从1.6到4.0(到目前为止)所以我有很多遗留设备......我必须让应用程序正常工作(好).

期待一些有趣的答案!

java storage android android-sdcard

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

以编程方式将正在运行的应用程序发送到后台

是否可以在android中以编程方式将活动发送到后台?

我正在创建一个恶作剧应用程序,在指定时间后播放有趣的声音(由用户输入).并且我不希望应用程序在播放该声音时可见,并且显示器应该是黑暗的.

android

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

Android上的同步翻译

我正在尝试在Android上同时进行多次翻译.

我在布局上有两个或更多按钮(大小相同),当我按下一个按钮时,我希望其他按钮移出屏幕.

我已经完成了一个测试应用程序来尝试实现此行为.

在它上面我点击一个按钮设置一个监听器进行测试,例如:

button.setOnClickListener(new View.OnClickListener() {

    public void onClick(View view) {
        Button toMove = (Button) findViewById(R.id.button_test2);
        Button toMove2 = (Button) findViewById(R.id.button_test3);

        AnimationSet set = new AnimationSet(true);

        TranslateAnimation anim = new TranslateAnimation(0, -toMove
          .getWidth(), 0, 0);
        anim.setFillAfter(true);
        anim.setDuration(1000);

        toMove.setAnimation(anim);
        toMove2.setAnimation(anim);

        set.addAnimation(anim);

        set.startNow();
    }
Run Code Online (Sandbox Code Playgroud)

风景:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <Button android:id="@+id/button_test" android:layout_width="200px"
        android:layout_height="50px" android:text="@string/hello" />

    <Button android:id="@+id/button_test2" android:layout_width="200px"
        android:layout_height="50px" android:text="@string/hello"/>

    <Button android:id="@+id/button_test3" android:layout_width="200px"
        android:layout_height="50px" android:text="@string/hello"/>

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

问题是两个按钮开始动画,一个接着一个接一个.我读过它是由于getDelayForView()返回每个的不同延迟.有没有办法同时移动2个或更多按钮?

谷歌不是很有帮助: -

android android-animation

7
推荐指数
1
解决办法
5212
查看次数

Android生命周期 - 从后台返回时,ActivityManager会终止进程 - >异常

我有一个非常无聊的问题.当我的应用程序转到后台时,有时会在LogCat显示时终止该进程:

INFO/ActivityManager(187): Low Memory: No more background processes.
INFO/ActivityManager(187): Process com.app.myapp (pid 20681) has died.
INFO/WindowManager(187): WIN DEATH: Window{40592708 com.app.myapp/app.myapp.dashboard.Dashboard paused=false}
ERROR/InputDispatcher(187): channel '408b1d40 app.myapp/app.myapp.menus.products.Promotions (server)' ~ Consumer closed input channel or an error occurred.  events=0x8
ERROR/InputDispatcher(187): channel '408b1d40 app.myapp/app.myapp.menus.products.Promotions (server)' ~ Channel is unrecoverably broken and will be disposed!
INFO/WindowManager(187): WIN DEATH: Window{408b1d40 app.myapp/app.myapp.menus.products.Promotions paused=false}
INFO/ActivityManager(187): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10100000 cmp=app.myapp/.Main } from pid 187
INFO/ActivityManager(187): Start proc app.myapp for activity app.myapp/.menus.products.Promotions: pid=20721 uid=10062 gids={3003, 1015}
Run Code Online (Sandbox Code Playgroud)

当我尝试返回应用程序时,通过任务切换器(长按回家),它会尝试返回上次打开的活动...并崩溃. …

android android-lifecycle android-activity

6
推荐指数
1
解决办法
9155
查看次数

如何在Android中移动视图?

我有一个项目,我有两个挑战:

第一:

  • 将图标移动到手指触摸屏幕的位置:

为此,我发现的最佳方法是.layout()在视图上使用方法.

第二:

  • 我有两个布局,在RelativeLayout上,都有屏幕宽度和高度(1隐藏在另一个后面).每当我点击一个按钮时,我想将一个上方的一个向右移动.

有没有更好的方法在Android上移动视图?

使用该方法可能有什么缺点.layout()

public void layout (int l, int t, int r, int b) 
Since: API Level 1 
Assign a size and position to a view and all of its descendants 

Parameters:
l  Left position, relative to parent 
t  Top position, relative to parent 
r  Right position, relative to parent 
b  Bottom position, relative to parent  
Run Code Online (Sandbox Code Playgroud)

提前致谢.

android views android-animation

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

App的后台服务似乎要睡觉了

我有一个Service列出联系人更改的实例:

Application.getContentResolver().registerContentObserver(ContactsContract.Contacts.CONTENT_URI, true, mContactsObserver);
Run Code Online (Sandbox Code Playgroud)

这是在onStartCommand和未注册的onDestroy

Service与生活在Application实例上的Manager通信.


考虑到这个设置,我有一个奇怪的错误:

  1. 我打开应用程序一切正常

  2. 我将应用程序发送到后台并将其删除,服务重新启动,一切正常

  3. 但是当我将应用程序发送到后台时,有时日志会停止,应用程序似乎冻结...我没有收到任何联系人更改通知,也没有收到任何其他内容,但应用程序也没有被杀死.我有一个ScheduleThreadPool不会触发其在此期间的任务.

每当我再次打开应用程序时,所有恢复都正常.并且日志显示服务未重新创建它仍在运行.

由于某些电池节电政策,这是预期的行为吗?

Importante note:这是在搭载Android 4.4.2的三星GT-I9515上发生的,因此Doze不是罪魁祸首.

service android

6
推荐指数
0
解决办法
91
查看次数

Proguard:如何避免缩小(和混淆)整个包以避免删除(和混淆)“未使用的方法”?

我目前正在使用一个使用大量反射的 Android 库。

一旦我启用 proguard 并运行它......它就会崩溃。

为什么?它使用了大量的反射,并且方法仅通过反射调用,因此它们被proguard检测为未使用并在收缩过程中删除,因此NoSuchMethodError抛出aa 。

为什么会发生这种情况?这很容易弄清楚它们在收缩过程中被删除了,因为 proguard 认为它们是未使用的,因此删除了这些代码片段(所有方法)

那么,如何配置 proguard 以避免缩小或混淆整个包?(图书馆)

注意:我不想使用 -dontshrink 选项,因为它要么全有要么全无,我只想避免使用特定的包。


更多信息:

运行时错误如下:

E/AndroidRuntime: FATAL EXCEPTION: main Process: com.my.app.debug, PID: 3771 
java.lang.NoSuchMethodError: observeValueForKeyPath [class java.lang.String, class java.lang.Object, class com.my.lib.util.Dictionary, class java.lang.Object]
at com.my.lib.util.Observable$ObservationManager$Observer.<init>(SourceFile:47)
at com.my.lib.util.Observable$ObservationManager$Observer.<init>(SourceFile:26)
at com.my.lib.util.Observable$ObservationManager.addObserver(SourceFile:159)
...
Run Code Online (Sandbox Code Playgroud)

请注意,问题是一个内部内部类......

我目前的配置是这样的:

-keep,includedescriptorclasses class com.my.** { *; }
-keepclassmembers class com.my.lib** { *; }
-keep,includedescriptorclasses class com.my.lib.util.Observable$* { *; }
-keep,includedescriptorclasses class com.my.lib.util.Observable$*$* { *; }
Run Code Online (Sandbox Code Playgroud)

但这显然只能避免混淆在收缩过程中未删除的方法......我需要避免在收缩过程中删除方法

android proguard android-proguard

6
推荐指数
1
解决办法
3851
查看次数

Android:java.util.logging.Logger 与 android.util.Log

为什么要Android维护 2 个似乎支持相同事物的不同 Log 类?

我说的是:

  1. Log android.util.Log
  2. Logger java.util.logging.Logger

对于我多年来所看到的开发,每个 Android 官方文档都指向LogLogger 而不是 Logger。

甚至像TimingLogger这样的特定记录器使用Log.


那么为什么支持这两个呢?

是否有任何功能可以通过Logger我无法实现Log

两者都有特定的用例吗?

java logging android

6
推荐指数
1
解决办法
933
查看次数

FLAG_ACTIVITY_CLEAR_TOP 和 android:launchMode="singleInstance"

我想我刚刚发现了一个非常奇怪的错误......但这可能只是我从未听说过的某种功能。

在我的应用程序中,当您尝试使用以下代码将堆栈“清理”到某个点时,如果 AndroidManifest 上有任何带有 android:launchMode="singleInstance" 的 Activity:

    Intent intent = new Intent(this, Xpto.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP
            | Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

它转到该活动。但是当你按回车键时,它又回到了之前的状态。本来应该已经完成​​了......

例子:

A -> B -> C

然后从 CI 中使用 Intent.FLAG_ACTIVITY_SINGLE_TOP| 调用 A Intent.FLAG_ACTIVITY_CLEAR_TOP 在清单上有一个 singleInstance。它转到 A,但仅将其带到前面。并且没有完成C和B。

有人可以解释这种行为吗?

我调用的 Xpto 类当时是堆栈的根活动。

android android-intent android-activity

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