我有两个问题,我的第一个Android应用程序。首先是我在安装应用程序后发现电池开始耗尽的速度是以前的两倍。我读了一篇关于此的文章说有时程序员会犯一个导致这种情况的错误。这是我的第一个应用程序,在这种情况下概率非常高。
第二个问题是我可以在应用关闭时保存变量,但是当手机关闭时数据会丢失。
至于代码,它主要是我在网上发现并试图合并的东西。这是一个包含三个变量的简单计算器。理想情况下,我想存储b
和c
,但允许用户覆盖它们。变量a
会随着每次使用而改变,因此无需存储。
这是我的主要内容:
package com.kwagz.calc;
import android.app.Activity;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends Activity {
String g, e;
String b; //changed(sorry)
String c; //changed
SharedPreferences sh_Pref;
Editor toEdit;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
loadSavedPreferences();
}
public void calculateClickHandler(View view) {
if (view.getId() == R.id.button1) {
EditText a = (EditText)findViewById(R.id.a);
EditText b = (EditText)findViewById(R.id.b);
EditText c = (EditText)findViewById(R.id.c);
TextView output = (TextView)findViewById(R.id.textView9);
double gp = Double.parseDouble(a.getText().toString());
int ab = Integer.parseInt(b.getText().toString());
int ac = Integer.parseInt(c.getText().toString());
double t = ((gp / ab) * ac);
output.setText(String.format("%.2f", t));
}
}
public void sharedPreferences() {
SharedPreferences saved_values =//there's no linebreak here in my code
PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
SharedPreferences.Editor editor=saved_values.edit();
editor.putString("b", b);
editor.putString("c", c);
editor.commit();
}
private void loadSavedPreferences() {
SharedPreferences saved_values =//there's no linebreak here in my code
PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
b = saved_values.getString("b", g);
}
}
答案 0 :(得分:0)
通过阅读你所说的内容,我脑子里形成的唯一合乎逻辑的解释是:你正在从你的应用程序启动后台服务,而后台服务正在运行它使应用程序一直运行,这解释了为什么变量存储直到手机转动关闭(当后台服务被杀死时)。
答案 1 :(得分:0)
好的,让我们一次提出一个问题。电池问题可能是很多问题,如果不了解有关您的程序的更多详细信息,我无法完全诊断它。 Android确实有一些good power saving tips。关键项目是尽可能减少连接设备的使用。两个最大的罪魁祸首是GPS和互联网连接。如果你的应用程序没有运行,那么它可以运行电池的唯一方法就是后台有线程,或者类似于AlarmService。
您正在使用SharedPreferences,应保存该值,但我认为您应该在onSaveInstanceState()
中保存代码。如果你这样做,它应该可以正常工作。
修改
经过仔细检查,您可以通过有趣的方式保存错误的东西。您应该保存EditText
的值,而不是EditText
本身的值。实际上,我只是删除对String a,b,c
的所有引用,将EditText定义移到顶部以替换它们,并执行以下操作:
editor.putString("b", b.getText().toString());
b.setText(saved_values.getString("b", g));
答案 2 :(得分:0)
为了重新创造这个问题,我进行了几次测试,没有成功。我还在研究sharedPreferences的事情,但电池耗尽(我怀疑)是由另一个应用程序引起的,恰好与我的安装相吻合。
正如我在arleitiss的笔记中提到的那样,我的Y!Mail显示出最高的电池消耗量。发布备注后的一两天,我的帐户开始执行,然后变为“无效”。重置后,应用程序不再显示在电池列表中。
感谢您的所有输入!