Heute stoße ich auf ein Problem mit den gemeinsamen Dateninterfaces. Ich deklariere die MainActivity für die Ausführung in einem anderen Prozess und schreibe die gemeinsam genutzten Daten in TestApplication auf 1 und starte dann die SubActivity, um die freigegebenen Daten anzuzeigen. Leider ist der in SubActivity angezeigte Wert immer noch 0, daher haben wir die Schlussfolgerung, dass zwei TestApplication-Instanzen in zwei Prozessen gefüllt werden und das Lesen und Schreiben von gemeinsam genutzten Daten unabhängig voneinander ist. Tatsächlich wurden die geteilten Daten nicht mehr zwischen den Prozessen geteilt. Meine Frage ist, was ist der andere Unterschied zwischen einer Aktivität, die in einem neuen Prozess beginnt, und der ursprünglichen, wie etwa der Erinnerung? Hier sind meine Codes:Was ist der Unterschied zwischen einem Aktivitätsstart in einem neuen Prozess und dem ursprünglichen Prozess?
<application
android:name=".TestApplication"
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:process="com.rlk.miaoxinli.hellokitty"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".SubActivity">
</activity>
</application>
public class TestApplication extends Application {
public int mValue = 0;
}
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private TextView mTextView;
private TestApplication mApplication;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mApplication = (TestApplication) getApplication();
setContentView(R.layout.activity_main);
mTextView = (TextView)findViewById(R.id.first);
mApplication.mValue = 1;
mTextView.setClickable(true);
mTextView.setOnClickListener(this);
}
@Override
protected void onResume() {
super.onResume();
mTextView.setText("" + mApplication.mValue);
}
@Override
public void onClick(View view) {
Intent intent = new Intent(this, SubActivity.class);
startActivity(intent);
}
}
public class SubActivity extends AppCompatActivity {
private TextView mTextView;
private TestApplication mApplication;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sub);
mTextView = (TextView) findViewById(R.id.second);;
}
}
Warum führen Sie MainActivity in einem anderen Prozess? –
Es gibt einen Dienst im Hintergrund ausgeführt in meinem Projekt, die 7M Speicher verbrauchen, wird der Speicher auf 50M nach dem Start einer Aktivität in meinem Projekt erhöhen und auf 20M nach dem Ende anstatt der origanl 7M verringern. Als Ergebnis davon wird meine Lösung die Aktivität im neuen Prozess starten k Bilde den neuen Prozess ab, sobald die Aktivität beendet wird, um den Speicher zurückzufordern. – Saint
Ihre Lösung ist schlecht. Sie haben ein Speicherleck. Sie müssen herausfinden, warum Sie 13 MB Arbeitsspeicher verlieren. Ihre Lösung ist ein Pflaster. Es wäre besser, das Problem zu finden und zu beheben. Es gibt viele Tools, um Speicherlecks zu finden. –