应用程序被杀时打开上次活动

时间:2013-11-08 13:33:19

标签: android android-activity kill

然后在我的应用程序中依次有103个活动 SplashActivity - >菜单---> Q_001 ---> Q_002 ......(......)..... Q_finish。 在每个活动中,我都有一个退出应用程序的按钮(如主页按钮),以及一个返回菜单的按钮。 现在我希望如果用户杀死应用程序,并在其他时间打开它返回正在使用的活动,

我知道我必须尝试改变SpalshActivity你正在做的最后一项活动,如果你没有进行任何活动来继续他的工作 这是SplashActivity的代码:

package org.somename;



import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle TravisIsAwesome) {
        super.onCreate(TravisIsAwesome);
        setContentView(R.layout.splash);



        Thread logoTimer = new Thread (){


            @Override
            public void run(){
                try{
                    sleep(500);
                    Intent menuIntent = new Intent("org.somename.MENU");
                    startActivity(menuIntent);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

                finally{
                    finish();

                }
            }
    };

    logoTimer.start();


    }






    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

一直说我不关心保存活动菜单,而是从“Q_001”开始并结束活动“Q_finish”的所有活动。我尝试使用新的这个方法:我在上一个问题中提出过,我已经实现了这个代码:

package org.somename;



import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle TravisIsAwesome) {
        super.onCreate(TravisIsAwesome);
        setContentView(R.layout.splash);

         int last_activity = getLastActivityIdFromSharedPreferences();
            if (last_activity == 1)
            {
                this.startActivity(new Intent(this, Q_001.class));
                finish();
            }

            int last_activity2 = getLastActivityIdFromSharedPreferences2();
            if (last_activity2 == 2)
            {
                this.startActivity(new Intent(this, Q_002.class));
                finish();
            }

        Thread logoTimer = new Thread (){


            @Override
            public void run(){
                try{
                    sleep(500);
                    Intent menuIntent = new Intent("org.somename.MENU");
                    startActivity(menuIntent);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

                finally{
                    finish();

                }
            }
    };

    logoTimer.start();


    }






    private int getLastActivityIdFromSharedPreferences2() {
        // TODO Auto-generated method stub
        return 2;
    }






    private int getLastActivityIdFromSharedPreferences() {
        // TODO Auto-generated method stub
        return 1;
    }






    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

但它不是SplahActivity的一部分,并且不会返回执行的Activity。 直接进入菜单,SplahActivity为空白页

提前感谢

2 个答案:

答案 0 :(得分:0)

我同意@ 2Dee。

我认为首先想到的是你并没有真正学习当前的Android开发。我想大多数人都会选择一项活动(如果你真的需要一台)和第二项活动来保持100个按钮。这100个按钮将保存在viewpager中。一开始要理解起来有点复杂,但在我看来,这是要走的路。视图寻呼机将循环使用,效率高,是一种强大的工具。

但也许你正在做学校运动?

编辑:我看到两种方式,可能有人可以找到更好的方法。

  1. 您可以将内存保存在用户所在的位置。当用户单击退出时,只需在SharedPreferences中保存当前问题并在开始时检索它:sharedPreferences
  2. 您可以点击退出按钮jsut调用onBackPressed()并覆盖onBackPressed。如果您这样做,活动将发送到后台,用户将发送到主页。如果他回到它,它将重新开始最后一次活动。您仍然必须保存它以防用户终止应用程序或Android杀死应用程序以进行资源管理。
  3. 编辑2:

    在Splash Activity中,您检索整数。在主要活动(持有问题和按钮的那个)中,您问题编号。

    这就是这样的:

    启动活动:

     @Override
    protected void onCreate(Bundle state){
       super.onCreate(state);
       . . .
    
       // Restore preferences
       SharedPreferences settings = getSharedPreferences(LAST_QUESTION, 0);
       int number = settings.getInt("last_question", 1); // default value is to start again
       goToQuestionNumber(number); // you better call this in onResume(). 
    }
    

    在onClik()

    启动的退出方法中
     SharedPreferences settings = getSharedPreferences(LAST_QUESTION, 0);
      SharedPreferences.Editor editor = settings.edit();
      editor.putInt("last_question", currentQuestionNumberThatYouShouldKnow);
    

答案 1 :(得分:0)

好吧,正如我想的那样,我相信您需要重新考虑您应用的架构:)

制作一个活动和一个片段。 Activity将负责在视图中切换Fragment并创建它们。它还将引用webviews所需的URL。

这就是我这样做的方式(但可能会对你的代码进行彻底的重构 - 如果你考虑的话,这不是一个糟糕的练习):

在活动中:

// declare your urls in the res/values/strings.xml and use them here.
private int[] webViewsUrls = {R.string.url1, R.string.url2, ...}; 

在Activity的onCreate:

SharedPreferences prefs = getSharedPreferences(PREFS_NAME, 0);
int activityIndex = prefs.getInt("lastActivityIndex", 0);
QuestionFragment fragment = new QuestionFragment();
Bundle bundle = new Bundle();
bundle.putInt("INDEX", activityIndex);
bundle.putString("WEBVIEW_URL", webViewsUrls[activityIndex]);
fragment.setArguments(bundle);
// Show fragment

要在Activity布局中向ViewGroup添加新片段(如果您不使用ViewPager,而是使用按钮更改视图中的问题):

FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
// create you fragment using the method I give above
fragmentTransaction.add(R.id.fragment_container_in_activity_layout, fragment, STRING_FRAGMENT_TAG);
fragmentTransaction.commit();

要替换视图中已有的片段,请使用replace方法而不是添加。

单击按钮或在ViewPager中,更改视图中的片段,并且在启动片段时不要忘记在SharedPreferences中保存activityIndex的新值。

我相信@Poutrathor的建议非常好,如果您想使用ViewPager,我可以参考我昨天给出的this answer,我认为这比满足您的要求要好100+以上。