【问题标题】:Creating an intent inside child activity rather than parent activity while starting an activity在启动活动时在子活动而不是父活动中创建意图
【发布时间】:2017-03-13 08:42:17
【问题描述】:

如果在启动 Activity 时我在子 Activity(要启动的 Activity)而不是在父 Activity(正在启动新 Activity 的 Activity)中创建 Intent,在性能和优化方面有什么区别。

例子-

ChildActivity.class

public static Intent createIntent(Context context) {
    return new Intent(context, ChildActivity.class);
}

ParentActivity.class

     startActivity(ChildActivity.createIntent(ParentActivity.this));

这是一个好的做法吗?如果从多个活动开始同一个活动,这种方法会有什么优势吗?

【问题讨论】:

    标签: android android-intent android-activity optimization


    【解决方案1】:

    我们可以使用这种做法,这样我们就可以通过调用静态方法从任何活动中启动Activity,我们将节省大量重复代码。对我来说,我创建了一个 Navigator 类,这个类将存储所有启动活动的方法:

    public class Navigator {
        public static final String VENUE_EXTRA = "venue_extra";
    
        private Navigator() {
    
        }
    
        public static void navigateToOnboarding(Activity activity) {
            Intent intent = new Intent(activity, OnboardingActivity.class);
            ActivityCompat.startActivity(activity, intent, null);
        }
    
        public static void navigateToSharing(Activity activity, Venue venue) {
            Intent intent = new Intent(activity, SharingActivity.class);
            intent.putExtra(VENUE_EXTRA, venue);
            ActivityCompat.startActivity(activity, intent, null);
        }
    
        public static void navigateToAppSetting(Activity activity) {
            Intent intent = new Intent();
            intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
            intent.addCategory(Intent.CATEGORY_DEFAULT);
            intent.setData(Uri.parse("package:" + activity.getPackageName()));
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
            intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
            activity.startActivity(intent);
        }
    }
    

    【讨论】:

    • 感谢您的回答。请解释一下它将如何节省大量重复代码?即使我们在每次启动活动时都在静态方法中创建意图,正在创建新意图?
    • 他指的是代码的有效长度,对于活动的每次开始,您只需要 1 行代码,而不是 3-4-5 或您在意图中有多少参数(在每个活动开始的地方)。性能方面是一样的。这是提高可读性的最佳做法。
    • @dzsonni 即使没有这个,我也可以用参数在一行中开始活动。 startActivity(new Intent(ParentActivity.this, ChildActivity.class).putExtra("key","value").putExtra("key","value"));
    • 其中哪一部分被认为是可读代码?你会创建数百个字符长的行吗?我认为代码不会通过任何适当的代码审查过程。您的代码不仅必须具有功能性,还必须易于阅读。正如我之前所说,你的想法可行,但它很丑:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    • 2021-09-23
    相关资源
    最近更新 更多