編輯:關於Android編程
在做項目的時候會碰到應用無法完全退出的問題,網上搜索了一下,比較流行的是將每個activity加到一個棧裡面,退出的時候清空這個棧。下面給出一個完整的類,包含相應的方法,需要用的時候直接調用即可。
在每個activity內實例化一個對象,然後通過addActivity()方法 將每個activity壓入到棧內。在需要退出的時候調用exit()方法
大家需要用的時候可以直接拷貝以下代碼,修改一下類名即可
比如我要將activity入棧只需要MyApplication.getInstance().addActivity(activity)
退出直接調用MyApplication.getInstance().exit()或其他方法
public class MyApplication extends Application {
public List mGetGoldCoinsFragments;
public long mLoginTime;
private static MyApplication instance;
private static final String tag = "myApplication";
private static Context appContext;
// 判斷Home Activity是否為Stop狀態
private final List activityList = new LinkedList();
private long mExitTime;
public static MyApplication getInstance() {
if (null == instance) {
instance = new MyApplication();
}
return instance;
}
/**
* 添加Activity到容器中
*
* @param activity
*/
public void addActivity(Activity activity) {
activityList.add(activity);
}
/**
* 遍歷所有的Activity並finish
*
* @param isDirectExit
* isDirectExit 是否直接退出
*/
public void exit(boolean isDirectExit) {
if ((System.currentTimeMillis() - mExitTime) > 2000) {
Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
mExitTime = System.currentTimeMillis();
} else {
if (isDirectExit) {
// 退出其它應用
for (Activity activity : activityList) {
Log.i(tag,
"activity.getPackageName(): "
+ activity.getPackageName());
if (!(activity.isFinishing())) {
activity.finish();
}
}
activityList.clear();
// 停止日志服務
Log.d(tag, "stopping log srvice");
// 判斷sdk版本
int sdkVersion = Integer.parseInt(VERSION.SDK);
if (sdkVersion >= 8) {
android.os.Process.killProcess(android.os.Process.myPid());
} else {
ActivityManager activityMgr = (ActivityManager) this
.getSystemService(ACTIVITY_SERVICE);
activityMgr.restartPackage(getPackageName());
}
// 跳轉到桌面
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addCategory(Intent.CATEGORY_HOME);
startActivity(intent);
System.exit(0);
} else {
exit();
}
}
}
/**
* 遍歷所有的Activity並finish
*/
public void exit() {
if ((System.currentTimeMillis() - mExitTime) > 2000) {
Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
mExitTime = System.currentTimeMillis();
} else {
// 退出其它應用
for (Activity activity : activityList) {
Log.i(tag, "activity.getPackageName(): "
+ activity.getClassLoader().getClass().getName());
// if (!(activity.isFinishing())) {
activity.finish();
// }
}
activityList.clear();
// 停止日志服務
Log.d(tag, "stopping log srvice");
// 判斷sdk版本
int sdkVersion = Integer.parseInt(VERSION.SDK);
if (sdkVersion >= 8) {
android.os.Process.killProcess(android.os.Process.myPid());
} else {
ActivityManager activityMgr = (ActivityManager) this
.getSystemService(ACTIVITY_SERVICE);
activityMgr.restartPackage(getPackageName());
}
// 跳轉到桌面
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addCategory(Intent.CATEGORY_HOME);
startActivity(intent);
System.exit(0);
}
}
/**
* 返回桌面
*/
public void backToHome() {
// 跳轉到桌面
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addCategory(Intent.CATEGORY_HOME);
startActivity(intent);
}
/**
* 從容器中刪除Activity
*
* @param activity
*/
public void removeActivity(Activity activity) {
activityList.remove(activity);
}
/**
* 清除所有Activity
*/
public void removeAllActivity() {
// 退出其它應用
for (Activity activity : activityList) {
Log.i(tag, "activity.getPackageName(): "
+ activity.getClassLoader().getClass().getName());
// if (!(activity.isFinishing())) {
activity.finish();
// }
}
activityList.clear();
}
/**
* 判斷容器中是否存在這個Activity
*
* @param activity
* @return
*/
public boolean isActivityContain(Activity activity) {
return activityList.contains(activity);
}
@Override
public void onCreate() {
super.onCreate();
appContext = getApplicationContext();
}
}
android自學之第一個HelloWorld程序
話不多說開弄:打開eclipse,左上角File=》New=》Android Application Projicet,如圖: Next,Next,Next,N
android構建基本XMl動畫
在res下新建一個文件夾,命名為anim,創建xml文件,例如創建了一個a1.xml //在這裡寫動畫 alpha:漸變透明度效果 rotate:旋轉動
Android實現圖片異步加載及本地緩存
在android項目中訪問網絡圖片是非常普遍性的事情,如果我們每次請求都要訪問網絡來獲取圖片,會非常耗費流量,而且圖片占用內存空間也比較大,圖片過多且不釋放的話很容易造成
Android 動態高斯模糊效果教程
寫在前面最近一直在做畢設項目的准備工作,考慮到可能要用到一個模糊的效果,所以就學習了一些高斯模糊效果的實現。比較有名的就是 FastBlur 以及它衍生的一些優化方案,還