在Android中实例化是否有经验法则?

时间:2015-03-14 16:57:53

标签: android

我是Android编程的初学者,我在下面看到了这段代码。

public void email(View view){
    Intent intent = new Intent(this, NotificationActivity.class);
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 
                                  0, intent, 0);

    NotificationCompat.Builder builder = new NotificationCompat.Builder(
            getApplicationContext())
            .setTicker("NEW EMAIL!!!")
            .setSmallIcon(android.R.drawable.ic_dialog_email)
            .setAutoCancel(true)
            .setContentText("This is a new E-mail!!!")
            .setContentIntent(pendingIntent);

    NotificationManager manager =(NotificationManager)getSystemService(
            Context.NOTIFICATION_SERVICE);
    manager.notify(0, builder.build());

这使我生气地看到,创建的一个实例PendingIntent是:

PendingIntent.getActivity(etc.)

并创建NotificationManager的实例是:

 (NotificationManager)getSystemService(etc.)

创建NotificationCompat.Builder的实例时:

new NotificationCompat.Builder(getApplicationContext())

您如何知道何时使用“新”一词或方法getSystemService()等。是否有一个普遍的实例化规则,或者我应该为每个班级逐一学习它?

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

  

创建PendingIntent的实例是:PendingIntent.getActivity(etc。)

那是“获取实例”。 getActivity()是否创建新实例,从缓存中检索一个实例等等都取决于PendingIntent的实现。

  

创建NotificationManager的实例是:(NotificationManager)getSystemService(etc。)

那是“获取实例”。 getSystemService()是否创建新实例,从缓存中检索一个实例等取决于Context的实际实现(不是Android SDK的公共部分)。

  

是否有普遍存在的规则

没有。我不知道任何编程语言都有这样的规则。

话虽这么说,通常如果你不应该使用构造函数,那么就没有公共构造函数。例如,您会注意到there is no public constructor on PendingIntentthere is no public constructor on NotificationManager

答案 1 :(得分:0)

Android框架中的许多类都可以使用new实例化:

Fragment f = new Fragment();
LinearLayout l = new LinearLayout();
Intent i = new Intent();

然后还有其他类,程序员不应该使用new来实例化它们。 Activity是一个例子。 Application是另一个。

在您引用的示例中,术语 Builder 是对Builder Pattern的引用。 PendingIntent类包含getActivity()getService()等方法,因为它会获取程序员指定类型的新PendingIntent,即Intent的{​​{1}} 1}}或Activity

根据经验,您将了解有关何时直接使用Service,何时使用 Singleton 等详情。这些是Java约定,其目的是提高效率和代码重用。