Android Can';无法修复异步任务崩溃:挂起或SSL连接或其他原因?

Android Can';无法修复异步任务崩溃:挂起或SSL连接或其他原因?,android,eclipse,ssl,android-asynctask,android-pendingintent,Android,Eclipse,Ssl,Android Asynctask,Android Pendingintent,几年前我开发了一款Android应用程序。它仍然在Play Store上,我用Eclipse和旧的Android开发工具(我从未使用过Android Studio)不断更新它,修复一些小错误 第一次启动时,我的应用程序开始从服务器下载数据并将其保存在内部数据库中(我使用了一个AyncTask,下面是源代码:)。在大多数手机上一切都很顺利 但在某些手机上,下载失败,用户无法使用该应用程序。 我买了一部这样的手机,把它连接到LogCat上,看看会发生什么。以下是日志: 04-04 21:07:50.

几年前我开发了一款Android应用程序。它仍然在Play Store上,我用Eclipse和旧的Android开发工具(我从未使用过Android Studio)不断更新它,修复一些小错误

第一次启动时,我的应用程序开始从服务器下载数据并将其保存在内部数据库中(我使用了一个AyncTask,下面是源代码:)。在大多数手机上一切都很顺利

但在某些手机上,下载失败,用户无法使用该应用程序。 我买了一部这样的手机,把它连接到LogCat上,看看会发生什么。以下是日志:

04-04 21:07:50.238: I/CastMediaRouteProvider(2082): in onDiscoveryRequestChanged: request=DiscoveryRequest{ selector=MediaRouteSelector{ controlCategories=[android.media.intent.category.LIVE_VIDEO, android.media.intent.category.REMOTE_PLAYBACK, com.google.android.gms.cast.CATEGORY_CAST/08FF1091, com.google.android.gms.cast.CATEGORY_CAST/4574A331] }, activeScan=false, isValid=true }
04-04 21:07:50.251: W/CastMediaRouteProvider(2082): Not a Cast compatible category: android.media.intent.category.LIVE_VIDEO
04-04 21:07:50.251: I/CastMediaRouteProvider(2082): Logging initial network connection state.
04-04 21:07:50.347: I/CastMediaRouteProvider(2082): Network connectivity changed
04-04 21:07:50.372: I/DeviceScanner(2082): [MDNS] Filter criteria: 08FF1091,CC1AD845,4574A331
04-04 21:07:50.372: I/DeviceScanner(2082): [MDNS] updateScannerState: No filter criteria was added.
04-04 21:07:50.372: I/DeviceScanner(2082): [MDNS] updateScannerState: No filter criteria was removed.
04-04 21:07:50.479: W/MdnsClient_Cast(2082): #acquireLock. Multicast lock not held. Acquiring. Subtypes:"4574A331,CC1AD845,08FF1091"
04-04 21:07:50.501: I/DeviceScanner(2082): [CastNearby] Filter criteria: 08FF1091,CC1AD845,4574A331
04-04 21:07:50.501: I/DeviceScanner(2082): [CastNearby] updateScannerState: No filter criteria was added.
04-04 21:07:50.501: I/DeviceScanner(2082): [CastNearby] updateScannerState: No filter criteria was removed.
04-04 21:08:08.860: W/IcingInternalCorpora(2082): getNumBytesRead when not calculated.
04-04 21:08:09.020: I/Icing(2082): Usage reports 0 indexed 0 rejected 0 imm upload false
04-04 21:08:09.063: I/Icing(2082): Usage reports 0 indexed 0 rejected 0 imm upload false
04-04 21:08:09.085: I/Icing(2082): Usage reports 0 indexed 0 rejected 0 imm upload false
04-04 21:08:09.100: I/Icing(2082): Usage reports 0 indexed 0 rejected 0 imm upload false
04-04 21:08:09.135: W/IcingInternalCorpora(2082): getNumBytesRead when not calculated.
04-04 21:08:09.265: I/art(1879): Background sticky concurrent mark sweep GC freed 49907(2MB) AllocSpace objects, 18(288KB) LOS objects, 11% free, 22MB/26MB, paused 7.887ms total 67.577ms
04-04 21:08:10.048: I/Icing(2082): Indexing 26F5DFBF7CB0FE13B1ED2D2D8BA3F397144A57D1 from com.google.android.gms
04-04 21:08:10.078: W/Icing(2082): CLD2 bad utf8
04-04 21:08:10.114: I/Icing(2082): Indexing done 26F5DFBF7CB0FE13B1ED2D2D8BA3F397144A57D1
04-04 21:08:10.546: I/WearableService(1879): Wear is not allowed to run on this device. Not starting Wear service.
04-04 21:08:10.547: D/WearableService(1879): callingUid 10020, callindPid: 1879
04-04 21:08:23.830: I/CastMediaRouteProvider(2082): in onDiscoveryRequestChanged: request=null
04-04 21:08:23.840: W/MdnsClient_Cast(2082): Multicast lock held. Releasing. Subtypes:"4574A331,CC1AD845,08FF1091"
04-04 21:08:23.872: W/MdnsClient(2082): unicast receiver thread is already dead.
04-04 21:09:06.643: W/IcingInternalCorpora(2082): getNumBytesRead when not calculated.
04-04 21:09:06.814: I/Icing(2082): Usage reports 0 indexed 0 rejected 0 imm upload false
04-04 21:09:06.848: I/Icing(2082): Usage reports 0 indexed 0 rejected 0 imm upload false
04-04 21:09:06.881: I/Icing(2082): Usage reports 0 indexed 0 rejected 0 imm upload false
04-04 21:09:06.898: I/Icing(2082): Usage reports 0 indexed 0 rejected 0 imm upload false
04-04 21:09:06.958: W/IcingInternalCorpora(2082): getNumBytesRead when not calculated.
04-04 21:09:07.841: I/Icing(2082): Indexing 26F5DFBF7CB0FE13B1ED2D2D8BA3F397144A57D1 from com.google.android.gms
04-04 21:09:07.864: W/Icing(2082): CLD2 bad utf8
04-04 21:09:07.876: I/Icing(2082): Indexing done 26F5DFBF7CB0FE13B1ED2D2D8BA3F397144A57D1
04-04 21:09:43.012: W/GCoreFlp(1879): No location to return for getLastLocation()
04-04 21:09:51.519: W/IcingInternalCorpora(2082): getNumBytesRead when not calculated.
04-04 21:09:51.629: I/Icing(2082): Usage reports 0 indexed 0 rejected 0 imm upload false
04-04 21:09:51.674: I/Icing(2082): Usage reports 0 indexed 0 rejected 0 imm upload false
04-04 21:09:51.712: I/Icing(2082): Usage reports 0 indexed 0 rejected 0 imm upload false
04-04 21:09:51.767: I/Icing(2082): Usage reports 0 indexed 0 rejected 0 imm upload false
04-04 21:09:51.826: W/IcingInternalCorpora(2082): getNumBytesRead when not calculated.
04-04 21:09:52.662: I/Icing(2082): Indexing 26F5DFBF7CB0FE13B1ED2D2D8BA3F397144A57D1 from com.google.android.gms
04-04 21:09:52.682: W/Icing(2082): CLD2 bad utf8
04-04 21:09:52.699: I/Icing(2082): Indexing done 26F5DFBF7CB0FE13B1ED2D2D8BA3F397144A57D1
04-04 21:11:36.806: D/BluetoothAdapter(1879): 341170672: getState() :  mService = null. Returning STATE_OFF
04-04 21:13:50.296: V/NativeCrypto(1879): Read error: ssl=0xb84d38c0: I/O error during system call, Connection reset by peer
04-04 21:13:50.315: V/NativeCrypto(1879): SSL shutdown failed: ssl=0xb84d38c0: I/O error during system call, Broken pipe
04-04 21:13:50.333: W/GCM(1879): Lowering wifi heartbeat interval 1 notch to 230000, good=0 bad=2
04-04 21:18:17.073: D/BluetoothAdapter(1879): 341170672: getState() :  mService = null. Returning STATE_OFF
04-04 21:18:20.076: D/BluetoothAdapter(1879): 341170672: getState() :  mService = null. Returning STATE_OFF
04-04 21:18:20.528: I/Authzen(2082): [DeviceStateSyncManager] Device state fast sync is disabled
04-04 21:18:20.581: I/DeviceCache(2082): Unable to convert the the network interface's MAC Address to string. MAC address cannot be null.
04-04 21:18:20.582: I/DeviceCache(2082): Unable to convert the the network interface's MAC Address to string. MAC address cannot be null.
04-04 21:18:20.582: I/DeviceCache(2082): Unable to convert the the network interface's MAC Address to string. MAC address cannot be null.
04-04 21:18:20.582: I/DeviceCache(2082): Unable to convert the the network interface's MAC Address to string. MAC address cannot be null.
04-04 21:18:20.582: I/DeviceCache(2082): Unable to convert the the network interface's MAC Address to string. MAC address cannot be null.
04-04 21:18:20.583: I/DeviceCache(2082): Unable to convert the the network interface's MAC Address to string. MAC address cannot be null.
04-04 21:18:20.583: I/DeviceCache(2082): Unable to convert the the network interface's MAC Address to string. MAC address cannot be null.
04-04 21:18:20.583: I/DeviceCache(2082): Unable to convert the the network interface's MAC Address to string. MAC address cannot be null.
04-04 21:18:20.583: I/DeviceCache(2082): Unable to convert the the network interface's MAC Address to string. MAC address cannot be null.
04-04 21:18:20.586: I/DeviceCache(2082): Unable to convert the the network interface's MAC Address to string. MAC address cannot be null.
04-04 21:27:48.016: D/BluetoothAdapter(1879): 341170672: getState() :  mService = null. Returning STATE_OFF
04-04 21:29:01.013: D/BluetoothAdapter(1879): 341170672: getState() :  mService = null. Returning STATE_OFF
04-04 21:29:03.196: I/Authzen(2082): [DeviceStateSyncManager] Device state fast sync is disabled
04-04 21:29:03.233: I/DeviceCache(2082): Unable to convert the the network interface's MAC Address to string. MAC address cannot be null.
04-04 21:29:03.233: I/DeviceCache(2082): Unable to convert the the network interface's MAC Address to string. MAC address cannot be null.
04-04 21:29:03.233: I/DeviceCache(2082): Unable to convert the the network interface's MAC Address to string. MAC address cannot be null.
04-04 21:29:03.234: I/DeviceCache(2082): Unable to convert the the network interface's MAC Address to string. MAC address cannot be null.
04-04 21:29:03.234: I/DeviceCache(2082): Unable to convert the the network interface's MAC Address to string. MAC address cannot be null.
04-04 21:29:03.234: I/DeviceCache(2082): Unable to convert the the network interface's MAC Address to string. MAC address cannot be null.
04-04 21:29:03.235: I/DeviceCache(2082): Unable to convert the the network interface's MAC Address to string. MAC address cannot be null.
04-04 21:29:03.235: I/DeviceCache(2082): Unable to convert the the network interface's MAC Address to string. MAC address cannot be null.
04-04 21:29:03.235: I/DeviceCache(2082): Unable to convert the the network interface's MAC Address to string. MAC address cannot be null.
04-04 21:29:03.236: I/DeviceCache(2082): Unable to convert the the network interface's MAC Address to string. MAC address cannot be null.
04-04 21:29:04.014: D/BluetoothAdapter(1879): 341170672: getState() :  mService = null. Returning STATE_OFF
04-04 21:29:10.297: W/GeofencerStateMachine(1879): Ignoring removeGeofence because network location is disabled.
04-04 21:29:11.075: E/WorkSourceUtil(2082): Could not find package: it.myapp.app
04-04 21:29:11.076: I/Icing(2082): doRemovePackageData it.myapp.app
04-04 21:29:11.133: I/LocationSettingsChecker(2082): Removing dialog suppression flag for package it.myapp.app
04-04 21:29:11.138: D/Wear_Controller(2082): Received broadcast action=android.intent.action.PACKAGE_REMOVED and uri=it.myapp.app
04-04 21:29:11.295: E/NetworkScheduler.SR(1879): Invalid parameter app
04-04 21:29:11.296: E/NetworkScheduler.SR(1879): Invalid package name : Perhaps you didn't include a PendingIntent in the extras?
04-04 21:29:11.461: W/IcingInternalCorpora(2082): getNumBytesRead when not calculated.
04-04 21:29:11.467: I/Icing(2082): Usage reports 0 indexed 0 rejected 0 imm upload false
04-04 21:29:11.475: I/Icing(2082): Usage reports 0 indexed 0 rejected 0 imm upload false
04-04 21:29:12.207: I/WearableService(1879): Wear is not allowed to run on this device. Not starting Wear service.
04-04 21:29:12.207: D/WearableService(1879): callingUid 10020, callindPid: 1879
04-04 21:29:12.482: I/Icing(2082): Indexing 11154CFA753891357620E30C887251401ECA34E6 from com.google.android.gms
04-04 21:29:12.517: I/Icing(2082): Indexing done 11154CFA753891357620E30C887251401ECA34E6
04-04 21:29:18.135: W/PlatformStatsUtil(2082): Could not retrieve Usage & Diagnostics setting. Giving up.
04-04 21:29:22.585: E/NetworkScheduler.SR(1879): Invalid parameter app
04-04 21:29:22.585: E/NetworkScheduler.SR(1879): Invalid package name : Perhaps you didn't include a PendingIntent in the extras?
04-04 21:29:22.605: I/iu.Environment(2082): update battery state; isPlugged? true*
04-04 21:29:22.660: I/iu.FingerprintManager(2082): Start processing all media
04-04 21:29:22.870: I/iu.FingerprintManager(2082): Start processing media store URI: content://media/external/images/media
04-04 21:29:22.980: I/iu.UploadsManager(2082): num queued entries: 0
04-04 21:29:23.041: I/iu.UploadsManager(2082): num updated entries: 0
04-04 21:29:23.086: W/SQLiteConnectionPool(2082): A SQLiteConnection object for database '/data/data/com.google.android.gms/databases/auto_complete_suggestions.db' was leaked!  Please fix your application to end transactions in progress properly and to close the database when it is no longer needed.
04-04 21:29:23.091: W/SQLiteConnectionPool(2082): A SQLiteConnection object for database '/data/data/com.google.android.gms/databases/help_responses.db.18' was leaked!  Please fix your application to end transactions in progress properly and to close the database when it is no longer needed.
04-04 21:29:23.094: W/SQLiteConnectionPool(2082): A SQLiteConnection object for database '/data/data/com.google.android.gms/databases/metrics.db' was leaked!  Please fix your application to end transactions in progress properly and to close the database when it is no longer needed.
04-04 21:29:23.107: I/iu.SyncManager(2082): NEXT; no task
04-04 21:29:23.171: W/PlatformStatsUtil(2082): Could not retrieve Usage & Diagnostics setting. Giving up.
04-04 21:29:23.208: I/iu.FingerprintManager(2082): Start processing media store URI: content://media/external/video/media
04-04 21:29:23.214: I/iu.FingerprintManager(2082): Start processing media store URI: content://media/phoneStorage/images/media
04-04 21:29:23.216: I/iu.FingerprintManager(2082): Start processing media store URI: content://media/phoneStorage/video/media
04-04 21:29:23.237: I/iu.FingerprintManager(2082): Finished generating fingerprints; 0,577 seconds
04-04 21:29:23.238: I/iu.FingerprintManager(2082):   numSeen=1872 numGenerated=3 numDeleted=11 numFailed=0
04-04 21:29:33.041: W/PlatformStatsUtil(2082): Could not retrieve Usage & Diagnostics setting. Giving up.
04-04 21:29:35.099: D/Wear_Controller(2082): Received broadcast action=android.intent.action.PACKAGE_ADDED and uri=it.myapp.app
04-04 21:29:35.251: I/WearableService(1879): Wear is not allowed to run on this device. Not starting Wear service.
04-04 21:29:35.254: D/WearableService(1879): callingUid 10020, callindPid: 1879
04-04 21:29:35.279: I/Icing(2082): Usage reports 0 indexed 0 rejected 0 imm upload false
04-04 21:29:35.295: I/Icing(2082): Usage reports 0 indexed 0 rejected 0 imm upload false
04-04 21:29:35.320: W/IcingInternalCorpora(2082): getNumBytesRead when not calculated.
04-04 21:29:36.306: I/Icing(2082): Indexing 11154CFA753891357620E30C887251401ECA34E6 from com.google.android.gms
04-04 21:29:36.402: I/Icing(2082): Indexing done 11154CFA753891357620E30C887251401ECA34E6
04-04 21:29:40.870: W/PlatformStatsUtil(2082): Could not retrieve Usage & Diagnostics setting. Giving up.
我认为问题可能在于这些信息:

04-04 21:29:11.295: E/NetworkScheduler.SR(1879): Invalid parameter app
04-04 21:29:11.296: E/NetworkScheduler.SR(1879): Invalid package name : Perhaps you didn't include a PendingIntent in the extras?
…或者可能与SSL连接有关:

04-04 21:13:50.296: V/NativeCrypto(1879): Read error: ssl=0xb84d38c0: I/O error during system call, Connection reset by peer
04-04 21:13:50.315: V/NativeCrypto(1879): SSL shutdown failed: ssl=0xb84d38c0: I/O error during system call, Broken pipe
我想不出有什么问题。我尝试了几种设备,结果如下:

它适用于以下手机:

  • 华为:6.0
  • 三星A5:6.0.1
  • 一加二:6.0.1
  • 华硕Zenphone:6.1
  • 一加:37.0
  • 宏达一号:7.0
它在以下手机上不工作(在AsynTask执行期间崩溃):

  • 三星S3 Neo 4.4.2
  • 华硕5.0.2
  • 三星S2 5.1.1
  • 三星Neo 5.1.1
对于故障排除,另一件可能值得注意的事情是,大约2个月前,我在我的主机上启用了SSL证书,应用程序从该主机获取数据

我已经搜索过关于这个问题的类似问题,但没有一个对我有帮助。
因为在大多数手机上,这个应用程序都可以正常工作,所以我不明白为什么在旧版本的Android上,它会因为这个LogCat而崩溃。有什么想法吗?

AsynTask错误的原因是在SSL连接中使用了
DefaultHttpClient
。Android已经弃用了Apache模块,该模块包括DefaultHttpClient,因为API级别为22。 我解决了在
doInBackground
方法中替换一些代码的问题

之前:

@Override
protected String doInBackground(String... urls) {
    int timeout = 10;
    int i, count = 0;

    BasicHttpParams basicParams = new BasicHttpParams();
    HttpConnectionParams.setConnectionTimeout(basicParams, timeout * 1000);
    HttpConnectionParams.setSoTimeout(basicParams, timeout * 1000 );
    DefaultHttpClient client = new DefaultHttpClient(basicParams);

    StringBuilder stringBuilder = new StringBuilder();
    for (i = 0; i < urls.length; i++) {
        HttpGet request = new HttpGet(urls[i]);
        request.addHeader("Cache-Control", "no-cache");

        try {
            HttpResponse response = client.execute(request);
            HttpEntity entity = response.getEntity();
            InputStreamReader in = new InputStreamReader(entity.getContent());
            BufferedReader reader = new BufferedReader(in);
            String line = "";

            while ((line = reader.readLine()) != null) {
                stringBuilder.append(line);

                count++;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        publishProgress(count * 100 / urls.length);
    }

    return stringBuilder.toString();
}
@覆盖
受保护的字符串doInBackground(字符串…URL){
int超时=10;
int i,计数=0;
BasicHttpParams basicParams=新的BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(基本内存,超时*1000);
HttpConnectionParams.setSoTimeout(基本内存,超时*1000);
DefaultHttpClient客户端=新的DefaultHttpClient(basicParams);
StringBuilder StringBuilder=新的StringBuilder();
对于(i=0;i
之后:

public static final int CONNECTON_TIMEOUT_MILLISECONDS = 60000;

@Override
protected String doInBackground(String... urls) {
    int i, count = 0;
    String urlsString = "";

    for (i = 0; i < urls.length; i++) {
        try {
            urlsString += executeGetHttpRequest(urls[i]);
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }                   
        count++;

        publishProgress(count * 100 / urls.length);
    }
    return urlsString;
}

public static String executeGetHttpRequest(final String path) throws ClientProtocolException, IOException {
    String result = null;
    HttpURLConnection urlConnection = null;
    try {
        URL url = new URL(path);
        urlConnection = (HttpURLConnection) url.openConnection();
        urlConnection.setConnectTimeout(CONNECTON_TIMEOUT_MILLISECONDS);
        urlConnection.setReadTimeout(CONNECTON_TIMEOUT_MILLISECONDS);
        result = readStream(urlConnection.getInputStream());
    } finally {
        if (urlConnection != null) {
            urlConnection.disconnect();
        }
    }
    return result;
}

private static String readStream(InputStream is) throws IOException {
    final BufferedReader reader = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
    StringBuilder total = new StringBuilder();
    String line;
    while ((line = reader.readLine()) != null) {
        total.append(line);
    }
    if (reader != null) {
        reader.close();
    }
    return total.toString();
}
public static final int CONNECTON\u TIMEOUT\u毫秒=60000;
@凌驾
受保护的字符串doInBackground(字符串…URL){
int i,计数=0;
字符串urlsString=“”;
对于(i=0;i
多亏了这个


上面的代码是关于GET请求的。由于这一点,我还解决了POST请求时AsyncTask的问题。

AsynTask错误的原因是使用SSL连接的
DefaultHttpClient
。Android已经弃用了Apache模块,该模块包括DefaultHttpClient,因为API级别为22。 我解决了在
doInBackground
方法中替换一些代码的问题

之前:

@Override
protected String doInBackground(String... urls) {
    int timeout = 10;
    int i, count = 0;

    BasicHttpParams basicParams = new BasicHttpParams();
    HttpConnectionParams.setConnectionTimeout(basicParams, timeout * 1000);
    HttpConnectionParams.setSoTimeout(basicParams, timeout * 1000 );
    DefaultHttpClient client = new DefaultHttpClient(basicParams);

    StringBuilder stringBuilder = new StringBuilder();
    for (i = 0; i < urls.length; i++) {
        HttpGet request = new HttpGet(urls[i]);
        request.addHeader("Cache-Control", "no-cache");

        try {
            HttpResponse response = client.execute(request);
            HttpEntity entity = response.getEntity();
            InputStreamReader in = new InputStreamReader(entity.getContent());
            BufferedReader reader = new BufferedReader(in);
            String line = "";

            while ((line = reader.readLine()) != null) {
                stringBuilder.append(line);

                count++;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        publishProgress(count * 100 / urls.length);
    }

    return stringBuilder.toString();
}
@覆盖
受保护的字符串doInBackground(字符串…URL){
int超时=10;
int i,计数=0;
BasicHttpParams basicParams=新的BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(基本内存,超时*1000);
HttpConnectionParams.setSoTimeout(基本内存,超时*1000);
DefaultHttpClient客户端=新的DefaultHttpClient(basicParams);
StringBuilder StringBuilder=新的StringBuilder();
对于(i=0;i