Android ????????? -- ????????????Android???????????????????????????

笛里谁知壮士心,沙头空照征人骨。这篇文章主要讲述Android ????????? -- ????????????Android???????????????????????????相关的知识,希望能为你提供帮助。
???????????????      ??????      ????????????      cut      ??????      ??????      oid      ati      ????????????     
???????????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
java ??????????????????Java ????????????????????????????????????????????????????????????????????? ??? ??????????????????????????? ?????????????????????????????????????????????????????????????????????????????????????????????????????? ??? ??????????????? ???
【Android ????????? -- ????????????Android???????????????????????????】?? ????????????????????????????????????????????????????????? ??? ?????? static ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????
?? ???????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
?? ????????? ?????????????????????????????????????????????????????????????????? new ??????????????????????????? ????????????????????????????????????????????????????????? Java ??????????????????GC?????????????????????
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????Java ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
?????????????????????????????? new ???????????????????????????????????????????????????????????????????????????????????????????????????????????? Java ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
???????????????

public class Sample { int s1 = 0; Sample mSample1 = new Sample(); public void method() { int s2 = 1; Sample mSample2 = new Sample(); // Sample ?????????????????? s2 ??????????????? mSample2 ??????????????????????????? mSample2 ????????????????????????????????? } }Sample mSample3 = new Sample(); // mSample3 ?????????????????????????????????????????????????????????????????????????????? s1 ??? mSample1?????????????????????????????????

Java?????????????????????Java????????????????????????????????????????????????????????? Java ???????????????????????????????????? new ????????????????????????????????? (??????????????????)??????????????????????????? (Heap)???????????????????????????????????????????????? GC ???????????????????????? Java ????????????????????????????????????????????????????????????????????? GC ?????????????????????????????????????????????????????????????????????????????????????????????????????????JVM????????????????????? Java ???????????????????????????????????????????????????GC ?????????????????????????????????GC ??????????????????????????????????????????????????????????????????????????????????????????????????????GC ????????????????????????
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
Java?????????????????????Java??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????Java??????????????????????????????????????????GC???????????????????????????????????????
???C++????????????????????????????????????????????????????????????????????????????????????????????????????????????C++?????????GC??????????????????????????????????????????Java????????????????????????????????????GC????????????????????????????????????????????????????????????????????????
????????????????????????????????????C++??????????????????????????????????????????????????????Java???????????????????????????????????????(??????????????????????????????)????????????????????????Java???????????????????????????
?????????????????????????????????????????????Java????????????????????????????????????C++?????????????????????Java?????????????????????????????????????????????????????????????????????????????????GC?????????
????????????????????????GC?????????????????????????????????????????????????????????????????????????????????GC???????????????GC?????????System.gc()???????????????Java????????????????????? ??????????????????JVM??????????????????????????????????????????????????????JVM??????????????????????????????????????????GC????????????GC?????????????????????????????????JVM??????GC????????????????????????????????????????????????????????????????????????GC???????????????????????????????????????????????????????????????GC???????????????????????????GC????????????????????????????????????????????????????????????????????????????????????GC?????????????????????????????????????????????????????????Web??????????????????????????????????????????????????????GC??????????????????????????????????????????????????????????????????????????????GC???????????????GC??????????????????????????????????????????????????????????????????????????????????????????????????????Sun?????????HotSpot JVM????????????????????????
?????????????????? Java ??????????????????????????????
Vector v = new Vector(10); for (int i = 1; i & lt; 100; i++) { Object o = new Object(); v.add(o); o = null; }

???????????????????????????????????????Object????????????????????????????????????????????? Vector ??????????????????????????????????????????????????? Vector ????????????????????????????????????????????? GC ?????????????????????????????????????????????????????????Vector ?????????????????? Vector ??????????????????????????????????????? Vector ??????????????? null???
?????????????????? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????????????????????Activity?????????????????????????????????
?????????????????????
public class AppManager {private static AppManager instance; private Context context; private AppManager(Context context) { this.context = context; }public static AppManager getInstance(Context context) { if (instance == null) { instance = new AppManager(context); } return instance; } }

?????????????????????????????????????????????????????????????????????????????????????????????Context???????????????Context??????????????????????????????????????? ??????????????????
1???????????????????????????Application ??? Context ????????? Application ????????????????????????????????????????????????????????????????????????????????????
2???????????????????????????Activity ??? Context ???????????? Context ???????????? Activity ????????????????????? Context ????????????????????????????????????????????????????????????????????????????????????????????????????????? Activity ??????????????????????????????????????????????????????????????????
?????????????????????????????????
public class AppManager {private static AppManager instance; private Context context; private AppManager(Context context) { this.context = context.getApplicationContext(); // ?????? Application ??? context }public static AppManager getInstance(Context context) { if (instance == null) { instance = new AppManager(context); } return instance; } }

?????????????????????????????????
// ????????? Application ??????????????????????????????getContext() ?????? Application ??? context...context = getApplicationContext(); ... /** * ???????????????context * @return ????????????context?????? */ public static Context getContext(){ return context; }public class AppManager {private static AppManager instance; private Context context; private AppManager() { this.context = MyApplication.getContext(); // ??????Application ???context }public static AppManager getInstance() { if (instance == null) { instance = new AppManager(); } return instance; } }

??????Activity????????????????????????
public class MainActivity extends AppCompatActivity { private static MainActivity activity; // ?????????????????????Activity???????????????????????? TextView saButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); saButton = (TextView) findViewById(R.id.text); saButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { setStaticActivity(); nextActivity(); } }); } void setStaticActivity() { activity = this; }void nextActivity(){ startActivity(new Intent(this,RegisterActivity.class)); SystemClock.sleep(1000); finish(); }@Override protected void onDestroy() { super.onDestroy(); } }

??????????????????????????????????????????????????? Activity ??????????????? TextView ??? OnClick ??????????????????????????????????????? Activity ???????????????????????? activity ???????????????????????????????????????????????????????????????????????????????????????????????? activity ???????????????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????
protected void onDestroy() { super.onDestroy(); activity = null; // ???onDestory????????????????????????activity???????????????????????????????????????????????????????????? }

??????View???????????????Activity????????????????????????????????????
... private static View view; // ????????????View TextView saButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); saButton = (TextView) findViewById(R.id.text); saButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { setStaticView(); nextActivity(); } }); } void setStaticView() { view = findViewById(R.id.sv_view); } ...

View?????????????????????????????????????????????Context?????????????????????????????????????????????context??????????????????Activity???????????????????????????????????????View??????????????????activity????????????activity??????????????????????????????View???????????????????????????activity????????????????????????????????????
???????????????????????????
protected void onDestroy() { super.onDestroy(); view = null; // ???onDestroy?????????????????????????????? }

?????????/AsyncTask???????????????????????????
public class MainActivity extends AppCompatActivity { void startAsyncTask() { new AsyncTask& lt; Void, Void, Void& gt; () { @Override protected Void doInBackground(Void... params) { while(true); } }.execute(); }@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); View aicButton = findViewById(R.id.at_button); aicButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startAsyncTask(); } }); } }

???????????????activity??????????????????????????? AsyncTask????????????????????????????????????????????????????????????????????????????????????activity????????????????????? Activity ????????????????????????????????????AsyncTask???????????????????????????????????????????????????????????????Activity????????????????????????????????????????????????????????????????????????Activity????????????????????????GC????????????????????????????????????
???????????????????????????
??????????????? AsyncTask ??????????????? AsyncTask ???????????? Activity ????????????????????????????????? Activity ??????????????????????????? AsyncTask cancel ??????
???????????????????????????????????????????????????????????????Activity????????????????????????????????????????????????????????????????????????????????????
public class MainActivity extends AppCompatActivity {private static TestResource mResource = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if(mManager == null){ mManager = new TestResource(); } //... }class TestResource { //... } }

?????????????????????Activity???????????????????????????????????????????????????mManager??????????????????Activity??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????Activity??????????????????Activity????????????????????????????????????
?????????????????????
????????????????????????????????????????????????????????????????????????????????????????????????????????????Context?????????????????????????????????Application ??? Context????????????Application ??? context ????????????????????????????????????????????????????????????????????????????????? Activity ??? Context???
HandlerHandler ???????????????????????????????????????????????????????????????????????????????????????????????? ANR ?????????????????????????????????????????????????????????????????????????????????????????????api?????????Handler??????????????? Handler ???????????????????????? Handler ???????????????????????????????????????????????????????????????????????????????????? Handler???Message ??? MessageQueue ??????????????????????????????????????? Handler ????????? Message ???????????????????????? Message ??????????????? Handler ?????????????????? MessageQueue ???????????????
?????? Handler ?????? TLS(Thread Local Storage) ??????, ??????????????? Activity ??????????????????????????????????????????????????????????????? View ?????? Activity ?????????????????????????????????????????????????????????????????????
public class SampleActivity extends Activity {private final Handler mLeakyHandler = new Handler() { @Override public void handleMessage(Message msg) { // ... } }@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Post a message and delay its execution for 10 minutes. mLeakyHandler.postDelayed(new Runnable() { @Override public void run() { /* ... */ } }, 1000 * 60 * 10); // Go back to the previous Activity. finish(); } }

?????? SampleActivity ???????????????????????? 10?????? ??????????????? Message???mLeakyHandler ?????? push ?????????????????? MessageQueue ???????????? Activity ??? finish() ?????????????????????????????? Message ???????????????????????????????????????????????? Activity ??? Handler ????????????????????? finish() ?????? Activity ??????????????????????????????????????????????????? Handler ??????????????????????????????????????????????????????????????????????????? SampleActivity??????
?????????????????????
??? Activity ????????????????????????????????????????????????????????? Handler ??????????????????????????????????????? Activity ?????????????????????????????????????????????????????????????????? Activity?????????????????? Activity ?????? context ??????????????????????????????
public class SampleActivity extends Activity {private static class MyHandler extends Handler { private final WeakReference& lt; SampleActivity& gt; mActivity; public MyHandler(SampleActivity activity) { mActivity = new WeakReference& lt; SampleActivity& gt; (activity); }@Override public void handleMessage(Message msg) { SampleActivity activity = mActivity.get(); if (activity != null) {// ??????????????????????????? // ... } } }private final MyHandler mHandler = new MyHandler(this); private static final Runnable sRunnable = new Runnable() { @Override public void run() { /* ... */ } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Post a message and delay its execution for 10 minutes. mHandler.postDelayed(sRunnable, 1000 * 60 * 10); // Go back to the previous Activity. finish(); } }

???????????????????????????????????????????????????Handler??????????????????????????? "??????????????? + WeakReference" ?????????????????????????????????????????????
Java?????????????????????Strong reference???SoftReference???WeakReference???PhatomReference?????????
?????? ???????????? ?????? ????????????
??? ???????????? ????????????????????? JVM?????????????????????
??? ?????????????????? ??????ReferenceQueue??????????????????/????????????/?????????????????????????????????????????????????????????????????????????????? ?????????????????????
??? ?????????????????? ??????ReferenceQueue??????????????????/????????????/???????????????????????????????????????????????????????????????gc???????????? gc???????????????
??? ?????????????????? ??????ReferenceQueue???????????????????????????????????????????????? gc???????????????
???android????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
???/???????????????????????????????????????ReferenceQueue??????????????????????????????????????????????????????????????????????????????Java????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????/??????????????????????????????????????????????????????????????????/????????????
Thread???????????????
public class SampleActivity extends Activity { void spawnThread() { new Thread() { @Override public void run() { while(true); } }.start(); }@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); View tButton = findViewById(R.id.t_button); tButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { spawnThread(); } }); } }

??????????????????????????????????????????AsyncTask???????????????
?????????????????????
???????????????Thread????????????static????????????????????????????????????????????????????????????Thread??????GC?????????DVM?????????????????????????????????hard references???????????????????????????Thread????????????GC??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????Activity???onDestroy????????????thread????????????
Timer Tasks???????????????
public class SampleActivity extends Activity { void scheduleTimer() { new Timer().schedule(new TimerTask() { @Override public void run() { while(true); } },1000); }@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); View ttButton = findViewById(R.id.tt_button); ttButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { scheduleTimer(); } }); } }

????????????????????????Timer???TimerTask????????????Cancel???????????????Timer???TimerTask?????????????????????Activity???
?????????????????????
????????????????????????Cancel???
Sensor Manager???????????????
public class SampleActivity extends Activity { void registerListener() { SensorManager sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ALL); sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_FASTEST); }@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); View smButton = findViewById(R.id.sm_button); smButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { registerListener(); } }); } }

??????Context??????getSystemService???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????Context?????????????????????Service??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????Activity??????????????????????????????Activity??????????????????????????????????????????????????????????????????
?????????????????????
???onDestroy???????????????????????????
?????????????????? static ?????????????????????????????????????????? static????????????????????????????????????????????????app???????????????????????????
??????????????????????????????????????????app?????????????????????????????????????????????app?????????????????????????????????????????????????????????????????????app??????????????????????????????????????????????????????????????????????????????app???????????????????????????????????????app????????????????????????????????????????????????????????????app???????????????????????????????????????????????????????????????app???????????????????????????????????????
???????????????????????????
?????????????????????????????????????????????????????????lazy??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
?????? override finalize()1???finalize ???????????????????????????????????????????????????????????????????????????????????????????????????????????????
???????????????GC??????????????????
Finalize daemon????????????????????????????????????
2???finalize ?????????????????????????????????????????????????????????????????????????????? finalize ?????????????????? GC ???????????????????????????????????????
?????? finalize ????????? object ?????? new ???????????????????????????????????? finalize reference ??????????????????Object???????????? finalize ??????????????????????????? object ???????????? finalize Reference ????????????????????????????????????????????? object ??????(??????????????????????????? object )?????????????????? GC ???????????????????????? finalize reference ????????????????????? finalize ????????????????????????
3?????????Finalize?????????object????????????????????????GC????????????????????????
?????????????????????????????????????????????????????????????????????????????????????????????ArrayList?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????static????????????????????????????????????
??????????????????????????????????????????????????????clear???????????????null??????????????????????????????
private List& lt; String& gt; nameList; private List& lt; Fragment& gt; list; @Override public void onDestroy() { super.onDestroy(); if (nameList != null){ nameList.clear(); nameList = null; } if (list != null){ list.clear(); list = null; } }

webView???????????????????????????webView??????????????????????????????destory()??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
?????????????????????
???webView?????????????????????????????????AIDL???????????????????????????webView??????????????????????????????????????????????????????????????????????????????????????????????????????????????????
??????????????????????????????BraodcastReceiver???ContentObserver???File????????? Cursor???Stream???Bitmap??????????????????????????????Activity????????????????????????????????????????????????????????????????????????????????????????????????
?????? -- ??????????????? static ????????? ??????static????????????
????????????????????????static???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
class Person { String name; int age; static String country = "A???"; public Person(String name, int age) { this.name = name; this.age = age; } public void info() { System.out.println("?????????" + this.name + "????????????" + this.age + "????????????" + country); } }; public class Demo { public static void main(String agrs[]) { Person p1 = new Person("??????", 30); Person p1 = new Person("??????", 31); Person p1 = new Person("??????", 32); Person.country = "B???"; p1.info(); p2.info(); p3.info(); } }

?????????????????????????????????static??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????p1.country = ...???????????????????????????static?????????????????????????????????
??????static????????????
?????????????????????????????????
class Person { private String name; private int age; private static String country = "A???"; public static void setCountry(String C) { country = c; } public Person(String name, int age) { this.name = name; this.age = age; } public void info() { System.out.println("?????????" + this.name + "????????????" + this.age + "????????????" + country); } public static String getCountry() { return country; } }; public class Demo { public static void main(String agrs[]) { Person p1 = new Person("??????", 30); Person p1 = new Person("??????", 31); Person p1 = new Person("??????", 32); Person.setCountry("B???"); p1.info(); p2.info(); p3.info(); } }

??????????????????
?? ???static???????????????????????????static????????????????????????
?? static??????????????????????????????static????????????????????????
?????????????????????????????????
class Person { private static String country = "A???"; private String name = "Hello"; public static void sFun(String C) { System.out.println("name = " + name); // ????????????????????????static?????? fun(); // ????????????????????????static?????? } public void fun() { System.out.println("World!!!"); } };

????????? ????????????
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????Outer????????????????????????Inner????????????Inner???????????????????????????Outer?????????????????????
????????????????????? public ??? private???????????????????????? public ??? private????????????????????????????????????????????????????????????????????????
????????????????????????
????????? class ?????????????????? { // ?????????????????? ????????? class ?????????????????? { // ?????????????????? } }

??????????????????
???????????????????????????????????????????????????
?????????????????????static???????????????????????????????????????static??????????????????????????????static???????????????????????????????????????????????????static?????????????????????????????????static?????????????????????
?????????????????????
class Outer { private static String info = "Hello World!!!"; // ????????????info??????static?????????????????????????????? static class Inner { public void print() { System.out.println(info); } }; }; public class InnerClassDemo { public static void main(String args[]) { new Outer.Inner().print(); } }

???????????????
Hello World!!!

????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????
?????????.????????? ??????????????? = ???????????????.new ?????????();

class Outer { private String info = "Hello World!!!"; class Inner { public void print() { System.out.println(info); } }; }; public class InnerClassDemo { public static void main(String args[]) { Outer out = new Out(); // ???????????????????????? Outer.Inner in = out.new Inner(); // ???????????????????????? in.print(); // ????????????????????? } }

??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????final????????????
class Outer { private String info = "Hello World!!!"; public void fun(final int temp) {// ???????????????????????????final?????? class Inner { public void print() { System.out.println("??????????????????" + info); System.out.println("?????????????????????" + temp); } }; new Inner().print(); } }; public class InnerClassDemo { public static void main(String args[]) { new Outer().fun(30); // ????????????????????? } }

???????????????????????????????????????????????????app??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????GC????????????????????????????????????GC????????????????????????????????????????????????????????????????????????????????????????????????Activity???????????????????????????????????????????????????????????????????????????????????????????????????????????????
Android ????????? -- ????????????Android???????????????????????????????????????????????????????????????????????????????????? Leakcanary Square?????????Android/Java????????????????????????

??????
01. https://developer.android.goo...
02. https://developer.android.goo...
03. https://www.jianshu.com/p/f77...

???????????????https://segmentfault.com/a/1190000016333862








    推荐阅读