我是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()
等。是否有一个普遍的实例化规则,或者我应该为每个班级逐一学习它?
感谢您的帮助!
答案 0 :(得分:1)
创建PendingIntent的实例是:PendingIntent.getActivity(etc。)
那是“获取实例”。 getActivity()
是否创建新实例,从缓存中检索一个实例等等都取决于PendingIntent
的实现。
创建NotificationManager的实例是:(NotificationManager)getSystemService(etc。)
那是“获取实例”。 getSystemService()
是否创建新实例,从缓存中检索一个实例等取决于Context
的实际实现(不是Android SDK的公共部分)。
是否有普遍存在的规则
没有。我不知道任何编程语言都有这样的规则。
话虽这么说,通常如果你不应该使用构造函数,那么就没有公共构造函数。例如,您会注意到there is no public constructor on PendingIntent
和there 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约定,其目的是提高效率和代码重用。