我正在开发一个应用程序,其中说5次应用程序被用户打开后,在第6次尝试应用程序应该要求用户的反馈。我尝试使用活动OnStart
,OnResume
,但是由于即使在离开并重新进入活动之后,这些方法也被调用,所以它没有运行。同样根据android功能,我无法退出应用程序,以便我可以从第一个活动中找到它。我如何查找应用程序启动了多少次?应用程序启动计数
我希望这不会造成混淆。
编辑
或者是有办法,其中我可以随时重新从第一个活动我的应用程序(或如欢迎页。),一旦用户按下家的退出程序。
我正在开发一个应用程序,其中说5次应用程序被用户打开后,在第6次尝试应用程序应该要求用户的反馈。我尝试使用活动OnStart
,OnResume
,但是由于即使在离开并重新进入活动之后,这些方法也被调用,所以它没有运行。同样根据android功能,我无法退出应用程序,以便我可以从第一个活动中找到它。我如何查找应用程序启动了多少次?应用程序启动计数
我希望这不会造成混淆。
编辑
或者是有办法,其中我可以随时重新从第一个活动我的应用程序(或如欢迎页。),一旦用户按下家的退出程序。
这其实很简单。使用SharedPreference或数据库。
的OnCreate过程中添加1至numberofTimes计数器和承诺。
OnCreate (Bundle bundle){
mPref = getPreferences();
int c = mPref.getInt("numRun",0);
c++;
mPref.edit().putInt("numRun",c).commit();
//do other stuff...
}
不管你的OnCreate被称为启动应用程序,或者你恢复应用程序,但isFinishing()只当且仅当用户返回,如果和真实(或你)呼吁程序结束()(,它是不是由经理被破坏)
这样,你只有当你正在做新的开始递增。
的isFinishing() Method内的onPause方法来检查,看看是否活动正在光洁度()或只是被暂停。
@Override
protected void OnPause(){
if(!isFinishing()){
c = mPref.getInt("numRun",0);
c--;
mPref.edit().putInt("numRun",c).commit();
}
//Other pause stuff.
}
这涵盖了所有的场景:
1. user starts app/activity (+1)-> finishes app, exit with finish()
2. user starts app (+1) -> pause (-1) -> returns (+1)-> finish
3. user starts app (+1) -> pause (-1) -> android kills process (0) -> user returns to app (+1) -> user finish.
每一个场景,你只增加了“时间运行”计数器每次活动
我认为你应该把C++放在onStart (或onResume)和c--在onStop(或onPause)中。看看活动生命周期:http://developer.android.com/reference/android/app/Activity.html – 2013-05-30 16:51:10
就像@Helin Wang说的,生命周期不一样 – 2014-06-18 22:49:23
另外,我相信最后一种情况是不正确的,因为你不算第一次发射。 1º“用户启动应用程序(+1) - >暂停(-1) - > android杀死进程(0)”(结果= 0),2º“用户返回到应用程序(+1) - >用户完成。 (结果= 1,就像你的第一个场景)。我为此发布了一个可能的解决方案。 – 2014-06-19 00:22:20
如果您只想计算“真”调用,然后扩展应用程序并将计数器逻辑放入Application#onCreate
。这可能是一个简单的首选项
感谢DroidIn.net。请参阅我对Sunil的回答的评论。 – 2011-04-27 06:02:55
如果您有启动应用程序的活动,那么您可以通过以下方式实现它: 1.数据库: - 通过数据库,您可以保存应用程序启动计数并在创建活动时检索它。
静态变量: - 在应用程序启动静态变量还保留值和结束
应用偏好: - 您可以在应用程序偏好存储值并且使用它
问题2第3种方法是,如果您关闭并再次打开手机,则会丢失数据。但如果你仍然想使用2或3的方法,然后2的方法很简单,
示例代码这里第三届方法
好你要扩展应用程序类,并创建从
public class MyApp extends Application{
int visitCount;
onCreate(){
visitCount=0;
}
一个子类
,你可以提到它在你的menifest文件中像
<application name="MyApp">
.....
</application>
,并在活动的onCreate您可以通过
得到它MyApp myApp=(MyApp)getApplicationContext();
EDIT1: 子类业务,且覆盖方法
public class myActivity extends Activity{
@Override
onSaveInstanceState(Bundle outState){
super.onSaveInstanceState(outState);
counterFlag=true;
}
}
它被调用时,用户按下home键
,并再次重写的onResume(),并检查您的计数器标志是否启用与否 和通过继承您的MyActivity
ALS创建您的所有活动o如果任何其他活动对后退按钮的点击退出点,那么你可以重写
@Override
public void back_pressed(){
}
,做你的任务,因此
谢谢Sunil,保存计数部分是好的。但我的主要问题是我如何知道应用程序已打开。我在我的应用程序中使用Application类。但是,如果用户单击主键a [[暂停,并且当用户返回应用程序恢复时,但不会调用应用程序类的OnCreate方法。 – 2011-04-27 06:01:33
那么只会调用一次,因为android并不会在家中或后面的按键上关闭应用程序。你必须使用任何启动活动onCreate方法来执行你的功能 – 2011-04-27 06:07:05
Sunil,我在我的最后一个评论中提到了这个问题。当新的应用程序实例启动时,stat-up活动将被调用。在家中按键应用程序暂停,因此不会调用启动活动。该应用将从上次暂停的位置恢复。 – 2011-04-27 06:19:19
但是...如果问题是,你不能告诉多少次,当然你知道时。我建议你采用不同的方法:例如每天询问一次用户。
行!我知道!这不是确切的解决方案,但是可能的解决方案。
感谢Redax ..但这将是恼人的用户接收这样的消息,每天.. – 2011-04-28 05:59:04
我认为这将是最好的“运行”一次选项以覆盖所有情况:
private static boolean valueOfLaunchCountModified = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
if(!valueOfCountModified){
preferences = getPreferences(MODE_PRIVATE);
launchCount= preferences.getInt("launchCount", 0);
if(preferences.edit().putInt("launchCount", ++launchCount).commit()){
valueOfCountModified = true;
if(launchCount == 5){
//Do whatever you want
}
}
}
}
如果我们记得the definition of a static variable(“..他们与班级相关,而不是与任何对象相关联。 “)我们会发现这对我们来说是完美的
当执行onPause方法或方向更改时,”valueOfLaunchCountModified“的值不会更改;但是,如果if该应用程序被破坏,的 “valueOfLaunchCountModified” 的值更改为false
只是,
Decalre:
初始化的onCreate(...):
prefs = getPreferences(Context.MODE_PRIVATE);
editor = prefs.edit();
打印或计数任何你想要的(任何地方在的onCreate或您指定的任何具体点击)
totalCount = prefs.getInt("counter", 0);
totalCount++;
editor.putInt("counter", totalCount);
editor.commit();
现在打印TOTALCOUNT要算例如:
System.out.println("Total Application counter Reach to :"+totalCount);
存储区每次调用oncreate/onresume时访问count并递增 – Dinash 2011-04-27 05:38:21
这就是问题dinash,我不能通过Onstart/onResume来计数,这不会给我正确的计数,因为在切换活动时也会调用这些。 – 2011-04-27 05:44:04
然后只在应用程序的主要活动的创建方法中增加计数 – Dinash 2011-04-27 05:49:41