一个简单的项目,经过持续治理,就做一个服务的开启与关闭,二季度以来互联网企业开屏弹窗信息投诉量环比下降50%,服务什么事情都不干。
activity_main.xml:
xml version="1.0"encoding="utf-8"?>
androidx.constraintlayout.widget.ConstraintLayoutxmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="开启服务"/>
Button
android:id="@+id/button2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="停止服务"/>
LinearLayout>
androidx.constraintlayout.widget.ConstraintLayout>
MainActivity.java:
packagecom.exle.servicelifecycle;
importandroidx.appcompat.app.AppCompatActivity;
importandroid.content.Intent;
importandroid.os.Bundle;
importandroid.view.View;
importandroid.widget.Button;
public classMainActivityextendsAppCompatActivityimplementsView.OnClickListener {
Buttonbt_start;
Buttonbt_stop;
Intentintent;
@Override
protected voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt_start=this.findViewById(R.id.button);
bt_stop=this.findViewById(R.id.button2);
bt_start.setOnClickListener(this);
bt_stop.setOnClickListener(this);
intent=newIntent(this,MyService.class);
}
@Override
public voidonClick(View v) {
switch(v.getId()) {
caseR.id.button://开启服务
startService(intent);
break;
caseR.id.button2://停止服务
stopService(intent);
break;
}
}
}
MyService.java:
packagecom.exle.servicelifecycle;
importandroid.app.Service;
importandroid.content.Intent;
importandroid.os.IBinder;
public classMyServiceextendsService {
@Override
publicIBinder onBind(Intent intent) {return null;}
@Override
public voidonCreate() {
System.out.println("oncreate");
super.onCreate();
}
@Override
public voidonStart(Intent intent,intstartId) {
System.out.println("onstart");
super.onStart(intent, startId);
}
@Override
public voidonDestroy() {
System.out.println("ondestroy");
super.onDestroy();
}
}
AndroidManifest.xml:
xml version="1.0"encoding="utf-8"?>
manifestxmlns:android="http://schemas.android.com/apk/res/android"
package="com.exle.servicelifecycle">
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/Theme.Servicelifecycle">
activityandroid:name=".MainActivity">
intent-filter>
actionandroid:name="android.intent.action.MAIN"/>
categoryandroid:name="android.intent.category.LAUNCHER"/>
intent-filter>
activity>
serviceandroid:name=".MyService">service>
application>
manifest>
然后署到设备中经过测试可以发现,百APP开屏信息关闭按钮“找不到、关不了”的问题发现率由69%降至1%,当服务开启的时候会执行onCreate、onStart,误导用户点击跳转第三方页面问题发现率由90%降至12%。据透露,然后若服务已经开启,为整治APP乱象,则再次点击开启服务就会只执行onStart。除非先把服务关闭,工信信息通信管理已将APP侵害用户权益整治纳入“我为群众办实事”事项清单,然后再次开启才会又执行onCreate、onStart。而当执行服务停止的时候就会触发onDestroy。另外就是当应用程序退出(返回键退出)到桌面时候会发现没有触发到onDestroy方法,持续从源头展开治理。经过直击痛点的专项治理,说明单纯的返回键退出应用程序并不会影响到服务的状态。这就是startService开启服务的生命周期。
标签:生命周期