前言:
? ? ? ?開(kāi)發(fā)過(guò)程中,有項(xiàng)需求需要重啟APP泡徙,谷歌之后都是清一色的代碼橱鹏,可惜自己試了之后真心沒(méi)用,只能自己想辦法了堪藐。(PS:百度就算了莉兰,對(duì)于程序員來(lái)說(shuō),百度簡(jiǎn)直就是“玩具度”礁竞。個(gè)人感言糖荒,不喜勿噴)
正文:
? ? ? ?其實(shí)原來(lái)很簡(jiǎn)單,就是先開(kāi)啟一個(gè)Service模捂,然后自己殺死APP的進(jìn)程捶朵,最后在Service里通過(guò)包名來(lái)啟動(dòng)一個(gè)APP并銷(xiāo)毀Service
代碼如下:
/**
* 此工具類(lèi)用來(lái)重啟APP,只是單純的重啟狂男,不做任何處理综看。
* Created by 13itch on 2016/8/5.
*/
public class RestartAPPTool {
/**
* 重啟整個(gè)APP
* @param context
* @param Delayed 延遲多少毫秒
*/
public static void restartAPP(Context context,long Delayed){
/**開(kāi)啟一個(gè)新的服務(wù),用來(lái)重啟本APP*/
Intent intent1=new Intent(context,killSelfService.class);
intent1.putExtra("PackageName",context.getPackageName());
intent1.putExtra("Delayed",Delayed);
context.startService(intent1);
/**殺死整個(gè)進(jìn)程**/
android.os.Process.killProcess(android.os.Process.myPid());
}
/***重啟整個(gè)APP*/
public static void restartAPP(Context context){
restartAPP(context,2000);
}
}
/***
* 該服務(wù)只用來(lái)讓APP重啟岖食,生命周期也僅僅是只是重啟APP红碑。重啟完即自我殺死
*/
public class killSelfService extends Service {
/**關(guān)閉應(yīng)用后多久重新啟動(dòng)*/
private static long stopDelayed=2000;
private Handler handler;
private String PackageName;
public killSelfService() {
handler=new Handler();
}
@Override
public int onStartCommand(final Intent intent, int flags, int startId) {
stopDelayed=intent.getLongExtra("Delayed",2000);
PackageName=intent.getStringExtra("PackageName");
handler.postDelayed(()->{
Intent LaunchIntent = getPackageManager().getLaunchIntentForPackage(PackageName);
startActivity(LaunchIntent);
killSelfService.this.stopSelf();
},stopDelayed);
return super.onStartCommand(intent, flags, startId);
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
}```
       最后別忘了,在**AndroidManifest.xml**文件中去注冊(cè)Service哦
<service
android:name=".restart_app.killSelfService"
/>
#亦可當(dāng)作廢話(huà):
       其實(shí)程序員的工作過(guò)程就是學(xué)習(xí)和積累的過(guò)程泡垃,本身APP重啟是一件很簡(jiǎn)單的小事析珊,但當(dāng)你下次需要此功能時(shí),又得重新寫(xiě)一遍重啟代碼蔑穴,這惡心的事真不適合我們偉大的(diao si)的程序員忠寻,所以我的個(gè)人建議是不斷的把自己需要的代碼積累成一個(gè)Library,打包成AAR也好澎剥,JAR包亦可以锡溯。當(dāng)你不斷地積累赶舆,不斷的重構(gòu)哑姚,不斷的封裝,總有一天會(huì)有屬于自己的lib芜茵。這時(shí)你會(huì)發(fā)現(xiàn)叙量,開(kāi)發(fā)速度加快了。各種原先項(xiàng)目里的單獨(dú)模塊九串,不需要單獨(dú)測(cè)試了绞佩,可以直接加入現(xiàn)有項(xiàng)目寺鸥。多方便啊。