Android 为了节省内存,哪个Intent对象是更好的选择
在onReceive方法的参数中使用接收的意图更好,还是创建并使用类型为intent类的新对象更好。如果我在onReceive方法中使用Intent对象received作为参数,那么行为将是不明确的。在Java(以及任何语言)中,良好编程的基本规则是不要为不同的目的重用变量。防止问题的最安全方法是将输入参数声明为Android 为了节省内存,哪个Intent对象是更好的选择,android,android-intent,android-broadcast,Android,Android Intent,Android Broadcast,在onReceive方法的参数中使用接收的意图更好,还是创建并使用类型为intent类的新对象更好。如果我在onReceive方法中使用Intent对象received作为参数,那么行为将是不明确的。在Java(以及任何语言)中,良好编程的基本规则是不要为不同的目的重用变量。防止问题的最安全方法是将输入参数声明为final。那样的话,你甚至不能做这样的价值改变。这样做: @Override public void onReceive(Context context, Intent intent)
final
。那样的话,你甚至不能做这样的价值改变。这样做:
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_IDLE)) {
Intent newIntent = new Intent(context, SpeedDialerActivity.class);
intent = new Intent(context, SpeedDialerActivity.class);
context.startActivity(newIntent||intent(received from argument)); // which object is better here.
}
}
无论如何,使用第二个变量不会导致任何显著的内存更改(如果有),但您的代码会更安全。如果输入intent
对象按原样重用,可以节省一些内存,但也不要这样做!只有当您发现这是一个问题时,才应该考虑这种内存优化。即使在这种情况下,通常也有其他方法来解决问题
这在很大程度上取决于您的应用程序内存最密集的是什么,但实际上,像图像这样的资源占用了大部分内存。您应该为此使用已经可用的缓存机制。只要在谷歌上搜索一下,就可以找到数不清的文章和谷歌IO视频。一些例子:
- Android官方性能提示
- 位图缓存
- 谷歌的截击:网络资源的图像缓存
- Android的内存分析:
- 在Java(以及任何语言)中,良好编程的一个基本规则是不要为不同的目的重用变量。防止问题的最安全方法是将输入参数声明为
final
。那样的话,你甚至不能做这样的价值改变。这样做:
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_IDLE)) {
Intent newIntent = new Intent(context, SpeedDialerActivity.class);
intent = new Intent(context, SpeedDialerActivity.class);
context.startActivity(newIntent||intent(received from argument)); // which object is better here.
}
}
无论如何,使用第二个变量不会导致任何显著的内存更改(如果有),但您的代码会更安全。如果输入intent
对象按原样重用,可以节省一些内存,但也不要这样做!只有当您发现这是一个问题时,才应该考虑这种内存优化。即使在这种情况下,通常也有其他方法来解决问题
这在很大程度上取决于您的应用程序内存最密集的是什么,但实际上,像图像这样的资源占用了大部分内存。您应该为此使用已经可用的缓存机制。只要在谷歌上搜索一下,就可以找到数不清的文章和谷歌IO视频。一些例子:
- Android官方性能提示
- 位图缓存
- 谷歌的截击:网络资源的图像缓存
- Android的内存分析: