Android 退出Application

来源:互联网 发布:经验模态分解算法 编辑:程序博客网 时间:2024/05/29 18:36

Application

package com.sjs.dz.rzxt3.base;import android.app.Activity;import android.app.Application;import android.content.Context;import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiskCache;import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;import com.nostra13.universalimageloader.cache.memory.impl.WeakMemoryCache;import com.nostra13.universalimageloader.core.DisplayImageOptions;import com.nostra13.universalimageloader.core.ImageLoader;import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;import com.nostra13.universalimageloader.core.assist.QueueProcessingType;import com.nostra13.universalimageloader.core.download.BaseImageDownloader;import com.nostra13.universalimageloader.utils.StorageUtils;import java.io.File;import java.util.ArrayList;import com.sjs.dz.rzxt3.utils.CrashHandler;public class SysApplication extends Application {    private static SysApplication instance;    public DisplayImageOptions options;    private ArrayList<Activity> activityList = new ArrayList<Activity>();    @Override    public void onCreate() {        super.onCreate();        instance = this;        CrashHandler crashHandler=new CrashHandler();        crashHandler.init(instance);        //在使用SDK各组件之前初始化context信息,传入ApplicationContext        //SDKInitializer.initialize(instance);        setImageOptions();    }    @Override    protected void attachBaseContext(Context base) {        super.attachBaseContext(base);        //MultiDex.install(this);    }    public synchronized static SysApplication getInstance() {        return instance;    }    private void setImageOptions() {        File cacheDir = StorageUtils.getOwnCacheDirectory(this, "imageloader/Cache"); //缓存文件的存放地址        ImageLoaderConfiguration config = new ImageLoaderConfiguration                .Builder(this)                  .memoryCacheExtraOptions(480, 800) // max width, max height                .threadPoolSize(3)//线程池内加载的数量                .threadPriority(Thread.NORM_PRIORITY - 2)  //降低线程的优先级保证主UI线程不受太大影响                .denyCacheImageMultipleSizesInMemory()                .memoryCache(new WeakMemoryCache()) //建议内存设在5-10M,可以有比较好的表现  new WeakMemoryCache()               // .memoryCache(new LruMemoryCache(2 * 1024 * 1024)) //建议内存设在5-10M,可以有比较好的表现  new WeakMemoryCache()                //.memoryCacheSize(2 * 1024 * 1024)                .discCacheSize(50 * 1024 * 1024)                .discCacheFileNameGenerator(new Md5FileNameGenerator())                .tasksProcessingOrder(QueueProcessingType.LIFO)                .discCacheFileCount(100) //缓存的文件数量                .diskCache(new UnlimitedDiskCache(cacheDir))                .defaultDisplayImageOptions(DisplayImageOptions.createSimple())                .imageDownloader(new BaseImageDownloader(this, 5 * 1000, 30 * 1000)) // connectTimeout (5 s), readTimeout (30 s)                .writeDebugLogs() // Remove for release app                .build();        ImageLoader.getInstance().init(config);    }    public void addActivity(Activity activity) {        activityList.add(activity);    }    public void removeActivity(Activity activity) {        activityList.remove(activity);    }    /**     *     遍历所有Activity并finish     */    public void exit() {        try {            for (Activity activity : activityList) {                activity.finish();            }            System.exit(0);        } catch (Exception e) {            e.printStackTrace();        }    }    /**     *     杀进程     */    @Override    public void onLowMemory() {        super.onLowMemory();        System.gc();    }}

BaseActivity

package com.sjs.dz.rzxt3;import android.content.Intent;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.Toolbar;import android.view.View;import android.view.Window;import android.widget.TextView;import android.widget.Toast;import com.sjs.dz.rzxt3.R;import com.sjs.dz.rzxt3.base.SysApplication;public abstract class BaseActivity extends AppCompatActivity implements View.OnClickListener{    private long lastClick = 0;    public Toolbar toolbar;    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        requestWindowFeature(Window.FEATURE_NO_TITLE);        super.onCreate(savedInstanceState);        SysApplication.getInstance().addActivity(this);        setContentView(getLayoutId());        initView();        loadData();        setListener();    }    @Override    public void onClick(View v) {        if (fastClick())            widgetClick(v);    }    @Override    public void finish() {        SysApplication.getInstance().removeActivity(this);        super.finish();    }    /**     * 设置ContentView     * @return R.layout.xxx     */    protected abstract int getLayoutId();    /**     * 初始化View     */    protected abstract void initView();    /**     * add Listener     */    protected abstract void setListener();    /**     * 下载数据     */    protected abstract void loadData();    /**     * 将数据更新到View     */    protected abstract void initDateToView();    /**     * view点击     * @param v     */    public abstract void widgetClick(View v);    /**     * 防止快速点击     * @return     */    private boolean fastClick() {        if (System.currentTimeMillis() - lastClick <= 1000) {            return false;        }        lastClick = System.currentTimeMillis();        return true;    }    /**     * 通用ToolBar 当存在是调用 布局文件 必须包含 single_toolbar.xml     * @param title 标题内容     * @param isBack 是否存在反回功能     */    protected void setToolBar(String title,boolean isBack) {        toolbar = $findViewById(R.id.toolbar);        toolbar.setVisibility(View.VISIBLE);        TextView tv_title = $findViewById(R.id.tv_title);        tv_title.setText(title);        toolbar.setTitle("");        setSupportActionBar(toolbar);        if (isBack) {            toolbar.setNavigationIcon(R.mipmap.ic_back_green);            toolbar.setNavigationOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View v) {                    finish();                }            });        }    }    /**     * findViewById     * @param resId     * @param <T>     * @return     */    public <T extends View> T $findViewById(int resId) {        return (T) findViewById(resId);    }    /**     *  Toast     * @param msg 消息     */    protected void $toast(CharSequence msg) {        Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();    }    /**     * startActivity     * @param cls 需要启动的Activity     */    protected void $startActivity(Class<?> cls) {        $startActivity(cls, null);    }    /**     * startActivity 存在Bundle     * @param cls 需要启动的Activity     * @param bundle Bundle数据     */    protected void $startActivity(Class<?> cls, Bundle bundle) {        Intent intent = new Intent(this, cls);        if (bundle != null) {            intent.putExtras(bundle);        }        startActivity(intent);    }    /**     * startActivityForResult     * @param cls 需要启动的Activity     * @param requestCode 请求码     */    protected void $startActivityForResult(Class<?> cls, int requestCode) {        $startActivityForResult(cls, null, requestCode);    }    /**     * startActivityForResult 存在Bundle     * @param cls 需要启动的Activity     * @param bundle Bundle数据     * @param requestCode 请求码     */    protected void $startActivityForResult(Class<?> cls, Bundle bundle, int requestCode) {        Intent intent = new Intent(this, cls);        if (bundle != null) {            intent.putExtras(bundle);        }        startActivityForResult(intent, requestCode);    }    /**     * 获取 传入 Bundle     * @return     */    protected Bundle $getIntentExtra() {        Intent intent = getIntent();        Bundle bundle = null;        if (null != intent)            bundle = intent.getExtras();        return bundle;    }}

ParentActivity

package com.sjs.dz.rzxt3;import android.view.View;public class ParentActivity extends BaseActivity {    @Override    protected int getLayoutId() {        return 0;    }    @Override    protected void initView() {    }    @Override    protected void setListener() {    }    @Override    protected void loadData() {    }    @Override    protected void initDateToView() {    }    @Override    public void widgetClick(View v) {    }}
阅读全文
0 0