who will tell you why when you start a service with HttpURLConnection in an open application, everything works fine, and when you screw up the application, the urlConnection.connect() stops here, and it starts working when you start it again, another moment, did a check for the Internet in the service, There is an open activation, but in a closed one there is not for some reason, I can not figure out the whole Internet, I can understand something in the manifest?
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:enabled="true" android:name=".LoadDataService"/>
</application>
Exexute Service
public class TestActivity extends Fragment {
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.activity_monitor, container, false);
final Button start_monitoring = rootView.findViewById(R.id.start_monitoring);
final Context context = rootView.getContext().getApplicationContext();
View.OnClickListener start_monitoring_lsnr = new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, LoadDataService.class);
context.startService(intent);
}
};
return rootView;
}
}
Service
public class LoadDataService extends Service
{
private DatabaseHandler db;
private static Context cur_context;
ExecutorService es;
@Override
public void onCreate() {
super.onCreate();
this.cur_context = getBaseContext();
db = new DatabaseHandler(cur_context);
es = Executors.newFixedThreadPool(1);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
StartService ss = new StartService(intent);
es.execute(ss);
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
super.onDestroy();
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
class StartService implements Runnable{
Intent intent;
public StartService(Intent intent) {
this.intent = intent;
}
@Override
public void run() {
try {
HttpsURLConnection connection = null;
connection = (HttpsURLConnection) new URL(url).openConnection();
connection.setRequestMethod("GET");
connection.setHostnameVerifier(hostnameVerifier);
connection.connect();
InputStream inputStream = connection.getInputStream();
InputStream inputStream = connection.getInputStream(); Here the code is stopped when the application is inactive, and when the application is active everything works fine
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
}
Logcat
2019-04-02 20:16:50.698 8888-9803/? E/CrashlyticsCore: Error occurred sending report com.crashlytics.android.core.SessionReport@6cab92f
io.fabric.sdk.android.services.network.HttpRequest$HttpRequestException: java.net.SocketTimeoutException: failed to connect to reports.crashlytics.com/54.221.227.86 (port 443) from /10.119.96.97 (port 54463) after 10000ms
at io.fabric.sdk.android.services.network.HttpRequest.part(HttpRequest.java:2550)
at io.fabric.sdk.android.services.network.HttpRequest.part(HttpRequest.java:2530)
at io.fabric.sdk.android.services.network.HttpRequest.part(HttpRequest.java:2516)
at com.crashlytics.android.core.DefaultCreateReportSpiCall.applyMultipartDataTo(DefaultCreateReportSpiCall.java:89)
at com.crashlytics.android.core.DefaultCreateReportSpiCall.invoke(DefaultCreateReportSpiCall.java:61)
at com.crashlytics.android.core.CompositeCreateReportSpiCall.invoke(CompositeCreateReportSpiCall.java:18)
at com.crashlytics.android.core.ReportUploader.forceUpload(ReportUploader.java:104)
at com.crashlytics.android.core.ReportUploader$Worker.attemptUploadWithRetry(ReportUploader.java:242)
at com.crashlytics.android.core.ReportUploader$Worker.onRun(ReportUploader.java:185)
at io.fabric.sdk.android.services.common.BackgroundPriorityRunnable.run(BackgroundPriorityRunnable.java:30)
at java.lang.Thread.run(Thread.java:764)
Caused by: java.net.SocketTimeoutException: failed to connect to reports.crashlytics.com/54.221.227.86 (port 443) from /10.119.96.97 (port 54463) after 10000ms
at libcore.io.IoBridge.connectErrno(IoBridge.java:185)
at libcore.io.IoBridge.connect(IoBridge.java:130)
at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:129)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:356)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:356)
at java.net.Socket.connect(Socket.java:616)
at com.android.okhttp.internal.Platform.connectSocket(Platform.java:145)
at com.android.okhttp.internal.io.RealConnection.connectSocket(RealConnection.java:141)
at com.android.okhttp.internal.io.RealConnection.connect(RealConnection.java:112)
at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:184)
at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:126)
at com.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:95)
at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:281)
at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:224)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:461)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:127)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:258)
at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getOutputStream(DelegatingHttpsURLConnection.java:218)
at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getOutputStream(Unknown Source:0)
at io.fabric.sdk.android.services.network.HttpRequest.openOutput(HttpRequest.java:2454)
at io.fabric.sdk.android.services.network.HttpRequest.startPart(HttpRequest.java:2467)
at io.fabric.sdk.android.services.network.HttpRequest.part(HttpRequest.java:2546)
at io.fabric.sdk.android.services.network.HttpRequest.part(HttpRequest.java:2530)
at io.fabric.sdk.android.services.network.HttpRequest.part(HttpRequest.java:2516)
at com.crashlytics.android.core.DefaultCreateReportSpiCall.applyMultipartDataTo(DefaultCreateReportSpiCall.java:89)
at com.crashlytics.android.core.DefaultCreateReportSpiCall.invoke(DefaultCreateReportSpiCall.java:61)
at com.crashlytics.android.core.CompositeCreateReportSpiCall.invoke(CompositeCreateReportSpiCall.java:18)
at com.crashlytics.android.core.ReportUploader.forceUpload(ReportUploader.java:104)
at com.crashlytics.android.core.ReportUploader$Worker.attemptUploadWithRetry(ReportUploader.java:242)
at com.crashlytics.android.core.ReportUploader$Worker.onRun(ReportUploader.java:185)
at io.fabric.sdk.android.services.common.BackgroundPriorityRunnable.run(BackgroundPriorityRunnable.java:30)
at java.lang.Thread.run(Thread.java:764)
I tried to do both in this topic - this problem , but it still did not help
Please HELP !