【问题标题】:Perform a task only at start of an Android application仅在 Android 应用程序启动时执行任务
【发布时间】:2013-03-24 03:06:13
【问题描述】:

在我的应用程序中,我希望仅在应用程序启动时将字符串传递给服务器。

我已使用 SharedPreferences 来检查字符串是否已发送。

此代码在 MainActivity 的星号处运行

        pref=getPreferences(MODE_PRIVATE);
        Sent=pref.getString("ID_SENT", "");
        if(Sent.equals(""))
        {
            SharedPreferences.Editor editor=pref.edit();
            editor.putString("ID_SENT","NO");
            editor.commit();
            Sent=pref.getString("ID_SENT","");
        }

现在在 AsyncTask 的 onPostExecute 中将字符串发送到服务器后,此代码用于将变量 ID_SENT 设置为 YES:

                    Sent=pref.getString("ID_SENT", "");
                    if(Sent.equals("NO"))
                    {
                        SharedPreferences.Editor editor=pref.edit();
                        editor.putString("ID_SENT","YES");
                        editor.commit();
                    }

现在的问题是,当我关闭应用程序并再次启动应用程序时,它不会将字符串发送到服务器,因为它发现 ID_SENT 设置为 YES。

那么有什么方法可以让我在 MainActivity 上按下后退按钮时将 ID_SENT 设置为 no?

编辑:

我将 MainActivity 的启动模式设置为 singleTop。所以现在只要我从另一个活动中按下主页按钮,活动就会恢复。并且不是每次都发送字符串,因为 MainActivity 只是恢复了。

【问题讨论】:

  • 开始是什么意思?是否要在调用 onCreateonCreate 时发送?

标签: android android-activity sharedpreferences


【解决方案1】:

那么有什么方法可以让我在 MainActivity 上按下后退按钮时将 ID_SENT 设置为 no?

是的,

@Override
public void onBackPressed()
{
    // do your save logic here
}

或者你可以override onDestroy(),这可能会更安全,以防Android销毁Activity以回收内存

【讨论】:

  • 我试过了。但是当我从 MainActivity 转到另一个活动时,会调用 onDestroy 并将 ID_SENT 更改为 NO。现在我在每个页面上都放置了主页按钮(MainActivity)链接,所以每当按下该按钮时,MainActivity 就会再次被调用,并再次将字符串发送到服务器。
  • 你在MainActivity上打电话给finish()吗?
  • 好吧,onBackPressed() 覆盖将满足您的需求,我相信。试一试,让我知道。但这对我来说似乎很奇怪,onDestroy() 每次都被调用
  • 是因为我没有放 onPause 方法吗?
  • 不应该,onPause() 会被 Android 调用,如果你不override 会在里面做正常的事情。 onDestroy() 不应该被调用,除非你调用 finish() 或者 Android 需要节省空间
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-16
相关资源
最近更新 更多