美文网首页
android:process引起的Application重复

android:process引起的Application重复

作者: 苍蝇的梦 | 来源:发表于2017-06-22 10:37 被阅读1150次

    2017-06-22 遇到的一点小问题
    今天进入百度地图的定位界面,在用getApplication()).getLocationService()获取全局locationService时,会出现对话框提示运行失败,而且定位功能也无法使用。但是应用却没有闪退。错误日志如下:

    E/AndroidRuntime: FATAL EXCEPTION: main
    Process: 包名:remote, PID: 31363
    java.lang.RuntimeException: Unable to create application 包名.DemoApplication: java.lang.NullPointerException
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4535)
    at android.app.ActivityThread.access$1500(ActivityThread.java:142)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1273)
    t android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:136)
    at android.app.ActivityThread.main(ActivityThread.java:5241)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:818)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:634)
    at dalvik.system.NativeStart.main(Native Method)
    Caused by: java.lang.NullPointerException
    at 包名.ease.EaseClient.init(EaseClient.java:29)
    at 包名.DemoApplication.onCreate(DemoApplication.java:81)
    at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1008)
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4532)
    at android.app.ActivityThread.access$1500(ActivityThread.java:142) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1273) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:136) 
    at android.app.ActivityThread.main(ActivityThread.java:5241) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:515) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:818) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:634) 
    at dalvik.system.NativeStart.main(Native Method) 
    ```
    加入的环信SDK后才会出现这问题,错误也是因为环信初始化产生的。
    打日志看下,原来在定位时重复进入了`Application`的`onCreate()`方法。正常的话,只在应用初始化时进入一次。
    错误日志的关键词是**Process**,网上搜了下,相关文章很多。
    ```
    <service
        android:name="com.baidu.location.f"
        android:enabled="true"
        android:process=":remote"/>
    ```
    ![android:process](https://img.haomeiwen.com/i2286722/7b2485219683dbf7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    原来`AndroidManifest.xml`里的**android:process**参数可以将service组件设置为一个独立进程,进程名就是包名加android:process里的参数但同时也会重新执行android:process。
    网上找了下很多文章写到如何防止onCreate()重复执行,隔了一天,懒得再找链接贴上,就贴一下我的代码。
    主要方法就是获取当前Process的名称,如果不是自己想要的,就直接return 掉。
    ```
    private String getProcessName(Context context) {
        ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
            List<ActivityManager.RunningAppProcessInfo> runningApps = am.getRunningAppProcesses();
            if (runningApps == null) {
                return null;
            }
            for (ActivityManager.RunningAppProcessInfo proInfo : runningApps) {
                if (proInfo.pid == android.os.Process.myPid()) {
                    if (proInfo.processName != null) {
                        return proInfo.processName;
                    }
                }
            }
            return null;
    }
    ```
    试了下,没问题了,不会提示运行失败,也能正常定位了。
    .
    .
    .
    
    
    
    
    
    
    
    #2017-06-15  遇到的一点小问题
    
    闲逛,刚好看到[Android实现图片相似度](http://zzimoo.com/similar/),这个[汪建军的博客](http://zzimoo.com/)还不错,确实是行动派,将[阮一峰的网络日志](http://www.ruanyifeng.com/blog/2011/07/principle_of_similar_image_search.html)里面的理论,用java代码写出来了。很有帮助。
    看了下其它几篇,先记录一些新的小发现,都是测试通过的。
    
    ######用代码触发一个点击事件的代码:view.performClick();
    
    ######context参数不止可以填this或者Main.this还可以写view.getContext();
    
    ######启动activity添加 android:launchMode="singleTask" 的话,不管之前是哪个界面,每次home键切出重进都会启动
    ```
    <activity android:name=".MainActivity"
        android:launchMode="singleTask">
          <intent-filter>
              <action android:name="android.intent.action.MAIN"/>
              <category android:name="android.intent.category.LAUNCHER"/>
          </intent-filter>
    </activity>
    ```
    ######gradle保持最新版本(latest.integration)
    例:`compile 'com.umeng.analytics:analytics:latest.integration'`

    相关文章

      网友评论

          本文标题: android:process引起的Application重复

          本文链接:https://www.haomeiwen.com/subject/mlfuqxtx.html