天天看點

Android Appliction->Context ,Activity->Context 差別鑒定

Application ,Activity 都是 Context的子類屬于繼承關系
Android Appliction->Context ,Activity->Context 差別鑒定
Android Appliction->Context ,Activity->Context 差別鑒定
這兩種不同的Context,Application的Context 伴随這App的生命周期 Activity的Context伴随着Activity 的生命周期 都是建立->銷毀 至于程式中用那種Context 要看特定的場景需求,稍有不慎就會引發持有Context記憶體洩漏的問題出現
  • 1.在單例方法中持有Activity的Context 會造成記憶體洩漏 單例伴随着App的生命周期出現引用Activity的Context會造成Activity銷毀單例持有Context記憶體無法回收
  • 2.避免非靜态的内部類,盡量使用靜态類,避免生命周期問題,注意内部類對外部對象引用導緻的生命周期變化
  • 3.對于生命周期長的對象,可以使用application context
  • 4.Application 的Context startActivity 是繼承ContextWrapper 方法 而Activity 重寫了ContextWrapper方法.Application startActivity 如果是預設standard 會報找不到任務棧的錯誤
錯誤資訊:Caused by: Android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

context.startActivity(intent);