我应该创建单独的活动来检查用户是否已登录?

时间:2013-06-28 09:34:52

标签: android android-activity

我想检查用户是否已登录。如果是,则显示主屏幕,否则显示登录屏幕。

现在我想到了两种方法。

1)将登录活动作为启动活动,检查onCreate()用户是否登录,如果是,则显示主屏幕。

2)创建单独的活动以检查用户是否已登录。

如果已登录,则显示主屏幕,否则显示登录屏幕。

但我很困惑我应该采取哪种方式呢? 有没有标准的方法来做到这一点?
一个优于另一个有什么优势吗?

任何帮助将不胜感激 在此先感谢。

3 个答案:

答案 0 :(得分:2)

使用额外的Activity来进行切换,并且基本上什么都不做,然后切换并启动正确的下一个Activity,是最简单的,但它会导致额外的过渡效果,这不是视觉上的最佳选择。

对于大多数用户来说,这并不是很明显,所以如果你受到时间压力,你可以这样做,并在以后更灵活的时候更新它。这不是一种可怕的方式。

一个更好的选择,就是有一个主要的Activity,它会检查情况并加载正确的Fragment。如果您熟悉Fragments,那么甚至不会比extra-Activity选项花费更长的时间。

答案 1 :(得分:1)

实现此目的的一种方法是使用片段,而不是在onCreate()之后,您只需提交所需的页面,但您的解决方案也没有任何问题。只需创建一个StartupActivity,检查您需要的信息(显示一些启动画面或其他内容,因为我假设此检查在后台线程上运行)并根据结果启动相应的活动。

答案 2 :(得分:1)

我认为你的问题没有一个明确的答案,所以我只想说明你喜欢做什么。我会避免进行额外的活动,并且会考虑你的第一个建议。在登录活动中,只是为了在视觉上正确,我会创建一个AsyncTask来检查用户是否已登录。这个AsyncTask应该有一个不可取消的ProgressDialog消息,如

  

检查登录信息......

这个AsyncTask应该在onCreate方法中最后调用。

这样的事情:

public class LoginScreen extends Activity {

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.loginscreen);

        //It may be a good idead to make the Views handling the login process invisible

        //Do whatever initialization work for the on create method here.
        .
        .
        .

        new CheckLoginAsyncTask().execute(); //This ideally should be called last. But it depends on the situation.
    }

    .
    .
    .



    private class GetVisitReasonsAsyncTask extends AsyncTask<Void, Void, Boolean>  {

         private ProgressDialog progressDialog;

         @Override
         protected void onPreExecute() { //Do the progress dialog initialization here...
         progressDialog = ProgressDialog
                .show(myActivityContext,
                        getString(R.string.ProgressDialogTitle),
                        getString(R.string.ProgressDialogMessage));
        }

            @Override
            protected JSONArray doInBackground(Void... arg0) {
                return checkLogin(); //Check login is boolean method returning true if the user is logged in, false otherwise.
            }

            @Override
            protected void onPostExecute(Boolean isLoggedIn) {
                 dialog.dismiss(); //dismiss the dialog

                 if(isLoggedIn) {
                     //User is logged in, finish this activity and go to main menu
                 } else {
                     //User is not logged in, stay in this actity and make visible the the Views handling the login process if you had previously make them invisible. 
                 }
            }
    }

}