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
- Android 退出Application
- Android 通过Application捕获全局异常,防止程序崩溃退出
- Android 退出多Activity的application的方式
- Android 退出多Activity的application的方式
- Android 退出多Activity的application的方式
- Android 退出多Activity的application的方式
- 23.9 Application exit application 退出
- Android学习笔记(13)---关于在退出应用时完全退出所有Application
- android 面试4: 如何退出Activity?如何安全退出已调用多个Activity的Application?
- 关于Android退出 Activity 和 退出已调用多个 Activity 的 Application方式及区别
- Android面试题-如何退出Activity?如何安全退出已调用多个Activity的Application?
- Application.CancelQuit 取消退出
- Application - 应用程序退出,总结
- 如何退出Activity application
- 在application中一键退出
- Android中application 全局变量 && 使用TAB页不能退出的问题
- 在Android中捕获Application全局异常 阻止系统弹出强制退出的对话框
- 在Android中自定义捕获Application全局异常,可以替换掉系统的强制退出对话框
- JAVA开发微信图灵机器人【L】
- 用js做一个简单的电商放大镜效果
- java客户端对cookie的操作
- sudo
- Imageloader加载
- Android 退出Application
- Java的I/O流、BIO、AIO、BIO知识汇总
- CTSC&APIO2017 后记
- 企业网站建设完成后常用的实用推广方法
- Java实现任意类Excel导入导出
- 计算几何学入门知识
- npm init
- CentOS完整版软件安装
- 【数论】奇奇怪怪的结论