笛里谁知壮士心,沙头空照征人骨。这篇文章主要讲述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??????????????? |
???/???????????????????????????????????????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
推荐阅读
- CSAPP Lab(Shell Lab——理解进程控制的秘密)
- mappingResources和mappingLocations区别
- SurfaceFlinger系列01--Android应用与SurfaceFlinger的连接过程
- 朝花夕拾Android性能优化篇之Android虚拟机简介
- 前25名最佳免费屏幕捕获工具下载推荐(Snagit替代品合集)
- 22款最佳免费在线视频下载器推荐合集(哪个最好用())
- 前24名最佳电子邮件客户端下载推荐(Outlook替代品合集)
- 如何修复Windows 10罗技扬声器无法运行(解决办法教程)
- 如何修复Windows 10中的Steam缺少文件权限(解决办法介绍)