相关疑难解决方法(0)

如何使用保存实例状态保存Android Activity状态?

我一直在研究Android SDK平台,有点不清楚如何保存应用程序的状态.因此,考虑到'Hello,Android'示例的这种小型重新设计:

package com.android.hello;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class HelloAndroid extends Activity {

  private TextView mTextView = null;

  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    mTextView = new TextView(this);

    if (savedInstanceState == null) {
       mTextView.setText("Welcome to HelloAndroid!");
    } else {
       mTextView.setText("Welcome back.");
    }

    setContentView(mTextView);
  }
}
Run Code Online (Sandbox Code Playgroud)

我认为这对于最简单的情况就足够了,但无论我如何远离应用程序,它总是以第一条消息响应.

我确信解决方案就像覆盖onPause或类似的那样简单,但我已经在文档中捅了大约30分钟左右,并且没有找到任何明显的东西.

android application-state android-activity

2538
推荐指数
26
解决办法
74万
查看次数

Android中的静态单例生存期

我有一些不清楚的情况:

在最后一次参考持有活动被破坏后,静态单例是否会被垃圾收集?因为Application中没有对单例实例的引用.那么我可以依靠单身人士吗?

通过官方Android文档:

通常不需要子类Application.在大多数情况下,静态单例可以以更模块化的方式提供相同的功能.

通过一些帖子:

https://web.archive.org/web/20160729201921/http://www.devahead.com/blog/2011/06/extending-the-android-application-class-and-dealing-with-singleton/

在开发应用程序时,我发现有时一些绑定到活动的静态变量恰好是未初始化的,即使它们之前已被初始化!我认为当一个静态变量被初始化时,它在应用程序的整个生命周期中都是如此,但事实并非如此.

换句话说,如果没有任何东西对我的静态单例类进行引用,那么是什么阻止它被垃圾收集和销毁?

singleton android

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

什么更有效?静态,数据传递,共享首选项,数据库......?

我最近在android上做了一个应用程序,在某些方面我怀疑哪个是共享数据的有效方式.就像我可以在一个类中声明静态变量和使用Classname.Variablename调用来自其他类变量或者我可以通过这些数据与我的意图,并从其他类得到的意图数据或者我可以使用共享偏好,并从数据它甚至可以将数据存储在数据库中,并从数据库中的其他类中检索它.我怀疑哪个是最有效的方法(获取数据)?由于android应用程序最终是为手机设计的,因此内存使用和效率应该是约束.任何人都可以指导我走正确的道路,这将非常有帮助.

android

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

Java静态变量变为null

我有一个android java类,其中一个静态实例保存用户的信息.但是,在一些用户使用我的应用程序的极少数情况下,该静态实例中的一个变量在一段时间后变为null.这个java类是全局的(不附加到任何活动).可能是什么导致了这个?

编辑:除了在应用程序启动期间,变量永远不会更改.我已经检查过调用它的函数永远不会被调用多次(adb logcat证明当我添加一个日志表明它正被调用时).

代码是这样的:

class UserCore
{
    class UserData
    {
        int ID;
        string Name;
    }

    public UserData User;
    public static UserCore Instance = new UserCore();

    public void Login()
    {
        Log.d("User", "Logging in");
        new Throwable().printStackTrace();

        User = null;
        //Fetch user data
        User = new UserData();
        User.ID = ...
        User.Name = ...
    }
    ....
}
Run Code Online (Sandbox Code Playgroud)

java android

11
推荐指数
1
解决办法
6875
查看次数

android 应用程序中的活动中的静态变量是否真的安全

我有一个多活动应用程序,并将数据保存在许多其他活动使用的主菜单活动中。

我在主要活动中的变量之一可能是这个

static double targetAngle = 45;
Run Code Online (Sandbox Code Playgroud)

我可能会从这样的另一个活动中调用该变量

diff = Main.targetAngle - angle;
Run Code Online (Sandbox Code Playgroud)

或者我可以这样设置

Main.targetAngle = angle;
Run Code Online (Sandbox Code Playgroud)

从这个参考,http://developer.android.com/guide/faq/framework.html这似乎是传递数据的正确方法。但是总是有关于活动在任何时候被操作系统杀死的话题。

我的问题是,这是否安全?

作为替代方案,我在 SO 成员的建议下有一个名为 Helper 的类,它具有一些在每个活动中使用的函数,这些函数也有一些静态数据。例如,Helper 类具有此数据,后跟我的函数

public class Helper {
static double[] filter1 = new double[]{0,0,0,0,0};
static double[] filter2 = new double[]{0,0,0,0,0};
static double cog = 0;
    ...
   various functions....
}
Run Code Online (Sandbox Code Playgroud)

如果这样会更好,我可以将我的共享变量保存在该帮助程序类中。该类每秒调用一次,如果它被杀死,我就死了,真的需要重新考虑一下。我应该提到我对我所做的事情没有任何问题,但是我的一个用户的 Nexus-7 崩溃了,我们不知道为什么,所以我认为他运行的应用程序可能比我多,因此我的问题.

我还应该提到,如果用户退出应用程序,我已经保存了所有需要保存在 SD 卡上的文件中的变量,以便它们可以重新加载。换句话说,当应用程序被杀死时数据丢失不是问题。我的问题是仅当应用程序还活着时我的主要活动是否被终止。

java android

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

Kotlin中的“对象”是否会收集垃圾

如果我们有一个这样的对象

object Repo { var activeMovies: ArrayList<Movie>? = null }
Run Code Online (Sandbox Code Playgroud)

然后我们这样称呼它来分配一个值

Repo.activeMovies = movieList
Run Code Online (Sandbox Code Playgroud)

实例化它的活动完成后,是否会收集垃圾

我知道这可能是一个非常基本的问题,但是如果使用Kotlin中object类型,我将无法理解其生命周期。

android garbage-collection object kotlin

3
推荐指数
1
解决办法
687
查看次数