android全局捕获异常使用详解

android全局捕获异常使用详解,第1张

22: 在自己程序中BaseApplication中的onCreate()方法设置全局异常捕捉类

23:直接在MainActivity的initData()初始化数据方法中,获取上次崩溃信息,然后打印即可

以上就是全局异常捕获及使用步骤,如若需要,直接拷贝到自己项目中即可使用

地址如下

>

1、Launcher进程启动过程

可以由下面图看到Launcher进程是如何被创建启动:

Activity Manager通过发送Intend来启动Launcher。

Intent intent = new Intent(mTopAction, mTopData != null

Uriparse(mTopData) : null);

intentsetComponent(mTopComponent);

if (mFactoryTest != SystemServerFACTORY_TEST_LOW_LEVEL)

{

intentaddCategory(IntentCATEGORY_HOME);

}

startActivityLocked(null, intent, null, null, 0, aInfo,

null, null, 0, 0, 0, false, false);

复制代码

因此,如果你要开机启动一个替换Launcher的程序,只要在程序<intent-filter>里面加入actionMAIN 、

categoryHOME、categoryDEFAULT就可以。如果出现多个程序都加入这种intent,系统会d出让你选择

哪个作为启动器。

2、Launcher初始化——LauncherApplication。

Application类,我想大部分做Android应用的朋友都用过,每个Android应用默认都有一个Application类,

你也可以继承Application类,然后加入自己代码。Application是一个全局的应用类,在AndroidManifestxml

我们也可以找到Application标签。

<application

android:name="comandroidlauncher2LauncherApplication"

android:label="@string/application_name"

android:icon="@drawable/ic_launcher_home"

android:hardwareAccelerated="@bool/config_hardwareAccelerated"

android:largeHeap="@bool/config_largeHeap"

android:configChanges="locale">

</application>

复制代码

Android四大组件的声明都需要放到application标签里面,默认使用的是系统的Application类,如果你在项目里面重载了它。就需要在标签,name属性下写上你的新的Application类名。Launcher里面就是继承了Application为LauncherApplication。应用启动的时候首先会加载Application。我们可以看到Launcher主类Launcherjava的onCreate函数里面,第一个就是获取Application的实例。

LauncherApplication app = ((LauncherApplication)getApplication());

复制代码

接下来我们看看LauncherApplication里面初始化,LauncherApplication大部分工作就是在初始化完成,剩下都是一些返回接口。

@Override

public void onCreate()

{

superonCreate();

//获取屏幕大小,主要用来区分手机还是平板

final int screenSize = getResources()getConfiguration()screenLayout &

ConfigurationSCREENLAYOUT_SIZE_MASK;

sIsScreenLarge = screenSize == ConfigurationSCREENLAYOUT_SIZE_LARGE ||

screenSize == ConfigurationSCREENLAYOUT_SIZE_XLARGE;

//屏幕密度

sScreenDensity = getResources()getDisplayMetrics()density;

//IconCahe里面保存了界面所有应用图标的绘画需要的数据,这个到时候具体分析再说。

//加入这东西的主要原因是为了提高绘画界面的效率

mIconCache = new IconCache(this);

//数据库加载类,LauncherModel是Launcher里面非常重要的一个类,相当于MVC模式里面的

//Model功能,管理数据和初始化数据

mModel = new LauncherModel(this, mIconCache);

//下面注册了一些监听器,主要包含APK文件更新删除等数据变化的时候接收的通知

//接收通知后,主要是用来更新Launcher里面的数据库。因为桌面应用图标数据,只会加载一次

IntentFilter filter = new IntentFilter(IntentACTION_PACKAGE_ADDED);

filteraddAction(IntentACTION_PACKAGE_REMOVED);

filteraddAction(IntentACTION_PACKAGE_CHANGED);

filteraddDataScheme("package");

registerReceiver(mModel, filter);

filter = new IntentFilter();

filteraddAction(IntentACTION_EXTERNAL_APPLICATIONS_AVAILABLE);

filteraddAction(IntentACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE);

filteraddAction(IntentACTION_LOCALE_CHANGED);

filteraddAction(IntentACTION_CONFIGURATION_CHANGED);

registerReceiver(mModel, filter);

filter = new IntentFilter();

filteraddAction(SearchManagerINTENT_GLOBAL_SEARCH_ACTIVITY_CHANGED);

registerReceiver(mModel, filter);

filter = new IntentFilter();

filteraddAction(SearchManagerINTENT_ACTION_SEARCHABLES_CHANGED);

registerReceiver(mModel, filter);

//contentresolver则是用于管理所有程序的contentprovider实例

ContentResolver resolver = getContentResolver();

//注册内容观察者,监听application数据库变化,回调

resolverregisterContentObserver(LauncherSettingsFavoritesCONTENT_URI, true, mFavoritesObserver);

}

复制代码

上面是LauncherApplication最主要的工作,初始化整个Launcher的一些关键类,和注册一些监听器。主要都是用来监听应用的安装更新删除等导致Launcher数据库变化的 *** 作。Launcher数据都是使用contentprovider来提供数据。其中注册的监听接口是

private final ContentObserver mFavoritesObserver = new ContentObserver(new Handler())

{

@Override

public void onChange(boolean selfChange)

{

//重新加载界面数据

mModelstartLoader(LauncherApplicationthis, false);

}

};

复制代码

LauncherSettingsFavoritesCONTENT_URI里面数据发生变化的时候,都会调用mModelstartLoader()接口,

重新加载Launcher的数据。startLoader的具体 *** 作,我后面分析LauncherModel类的时候会分析。这一块涉及

Launcher所有数据加载。剩下的接都是返回初始化时候创建的对象或者获取屏幕密度、获取是否大屏幕。

后面很多处理都需要判断是否是大屏幕,40以后手机平板都共用一套系统,导致多了很多处理。 3、Launcherjava初始化Launcherjava是Launcher里面最主要的类,是一个Activity。启动的第一个组件。既然是Activity,我们要分析它初始化,毫无疑问,需要找到onCreate()里面分析。把主要一些分析用注释方式写在代码里面,这样比较方便阅读。

2017年5月24日 (周三) 大雨(超j8大)

自定义了一个类 App类 继承了Application 类 定义一个静态变量 public static Context context;

但是在调用 APPcontext 时程序报错奔溃

开始以为是调用静态变量 未实例化App 所以没调用 onCreate() 所以未执行到 context = getApplicationContext(); 所以没获取到contenxt的原因 于是对App类做了稍微微的调整

按常理来说 类实例化后执行了 onCreate() 应该获取到了 getApplicationContext()

但是

程序依然报错闪退

于是采用了万能的问题解决方法

执行到 Context context=Appcontext;

成功获取到系统的Context

以上就是关于android全局捕获异常使用详解全部的内容,包括:android全局捕获异常使用详解、Android中的全局监听方式、android源码中有launcher2launcher3,用的是哪个等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9761719.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存