Android 退出Application

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) {

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值