1.全局獲取context的技巧
public class MyApplication extends Application {
private static Context context;
@Override
public void onCreate() {
super.onCreate();
context=getApplicationContext();
}
public static Context getContext() {
return context;
}
}
2.使用Intent傳遞對象
- 使用Intent傳遞對象有兩種實(shí)現(xiàn)方式:Serializable和Parcelable
-Serializable序列化:
public class Person implements Serializable {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
//傳遞
Person person=new Person();
person.setName("huazai");
person.setAge(18);
Intent intent=new Intent(……);
intent.putExtra("persong_data",person);
//獲取
Person person1= (Person) getIntent().getSerializableExtra("persong_data");
- Parcelable方式:
public class Song implements Parcelable {
private String name;
private String singer;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSinger() {
return singer;
}
public void setSinger(String singer) {
this.singer = singer;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel parcel, int i) {
parcel.writeString(name); //此處寫和下面的讀 必須順序一致
parcel.writeString(singer);
}
public static final Parcelable.Creator<Song> CREATOR=new Parcelable.Creator<Song>(){
@Override
public Song createFromParcel(Parcel parcel) {
Song song=new Song();
song.name=parcel.readString();
song.singer=parcel.readString();
return song;
}
@Override
public Song[] newArray(int i) {
return new Song[i];
}
};
}
//使用
//傳遞
Song song=new Song();
song.setName("隱形人");
song.setName("孫燕姿");
Intent intent=new Intent();
intent.putExtra("songInfo",person);
//獲取
Song song1=(Song) getIntent().getParcelableExtra("songInfo");
- log工具
- 程序斷點(diǎn)調(diào)試
3. 創(chuàng)建定時(shí)任務(wù)
Alarm機(jī)制
長時(shí)間在后臺定時(shí)運(yùn)行的服務(wù)
public class LongRunningService extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
new Thread(new Runnable() {
@Override
public void run() {
//執(zhí)行具體邏輯
}
}).start();
AlarmManager manager= (AlarmManager) getSystemService(MyApplication.getContext().ALARM_SERVICE);
int anhour=60*60*1000;
long triggerAtTime= SystemClock.elapsedRealtime()+anhour;
Intent intent1=new Intent(this,LongRunningService.class);
PendingIntent pi=PendingIntent.getService(this,0,intent1,0);
//set不夠精確掸茅,是系統(tǒng)在耗電方面的優(yōu)化撞芍; setExact()會保證任務(wù)精確的執(zhí)行
manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,triggerAtTime,pi);
return super.onStartCommand(intent, flags, startId);
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
4. Doze模式
- 當(dāng)用戶設(shè)備是android6.0以上,該設(shè)備未接電源,且屏幕關(guān)閉一段時(shí)間寒波,就會進(jìn)入到Doze模式;該模式下升熊,會對CPU俄烁,網(wǎng)絡(luò),alarm等活動(dòng)進(jìn)行限制级野,從而延長電池壽命页屠。
5.多窗口模式
- android 7.0 及以上
- 禁用
<application
android:resizeableActivity="false"
……
6. Lambda表達(dá)式
- java 8 特色功能,