ورود

View Full Version : مشکل بسته شدن برنامه ( برنامه خود به خود دوباره راه اندازی میشه)



hosseinrasouli
پنج شنبه 20 شهریور 1393, 23:07 عصر
سلام به دوستان .

برنامه را هم با متد Finish() و هم با تابع زیر امتحان کردم . جالبی اینکه برنامه بسته میشه ولی دوباره راه اندازی میشه.
با این کد هم بررسی کردم:

protected void onDestroy() {
android.os.Process.killProcess(android.os.Process. myPid());
super.onDestroy();
}


کد کامل : دوستان راهنمایی کنند ( هر چی کردم نشد کلافم کرد)


package com.hrasouli.chardahmahsoom;

import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Application;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.graphics.Typeface;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewConfiguration;
import android.view.Window;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends ActionBarActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Button btn_fehrest=(Button) findViewById(R.id.button1);
Button btn_temas=(Button) findViewById(R.id.button2);
Button btn_about=(Button) findViewById(R.id.button3);
Button btn_exit=(Button) findViewById(R.id.button4 );
Typeface bkoodak=Typeface.createFromAsset(getAssets(), "font/BKoodkBd.ttf");
btn_fehrest.setTypeface(bkoodak);
btn_temas.setTypeface(bkoodak);
btn_about.setTypeface(bkoodak);
btn_exit.setTypeface(bkoodak);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENT ATION_PORTRAIT);

btn_fehrest.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
Intent page=new Intent(MainActivity.this,Activity2.class);
startActivity(page);
}
});

btn_temas.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
Intent page=new Intent(MainActivity.this,Temas.class);
startActivity(page);
}
});
btn_about.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
Intent page=new Intent(MainActivity.this,About.class);
startActivity(page);
}
});

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
btn_exit.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
alert();
}
});

}
//////////////////////////////////////////////////////////////////////////////////////////

public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {

case R.id.action_share:
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("text/plain");
String str="دانلود نرم افزار : \n لينک دانلود : www.google.com";
shareIntent.putExtra(Intent.EXTRA_TEXT,str);
shareIntent.putExtra(Intent.EXTRA_SUBJECT, R.string.zendegi_chardah_mahsoom);
startActivity(Intent.createChooser(shareIntent, "اشتراک گذاري ..."));

return true;

case R.id.action_setting:
Intent page_setting=new Intent(MainActivity.this,Setting.class);
startActivity(page_setting);

return true;


default:
return super.onOptionsItemSelected(item);
}
}
//////////////////////////////////////////////////////////////////////////////////////////
public void onBackPressed() {

alert();
}
///////////////////////////////////////////////////////////////////////////////////////////

private void alert() {
AlertDialog.Builder alertDialog = new AlertDialog.Builder(MainActivity.this);
alertDialog.setTitle(R.string.tmessage);
alertDialog.setMessage(R.string.message);
alertDialog.setIcon(R.drawable.ic_action_help);
// Setting Positive "Yes" Button
alertDialog.setPositiveButton(R.string.yes,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
onDestroy();
finish();

}
});
// Setting Negative "NO" Button
alertDialog.setNegativeButton(R.string.no,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();

}
});
// Showing Alert Message
alertDialog.show();
}
////////////////////////////////////////////////////////////////////////////////////////

protected void onDestroy() {
android.os.Process.killProcess(android.os.Process. myPid());
super.onDestroy();
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

}

slr560
پنج شنبه 20 شهریور 1393, 23:44 عصر
اصن متد onDestoy نیازی نیس
توی متد alert اون خط onDestroy رو پاک کن
و بعدش متد onDestroy رو پاک کن

hosseinrasouli
جمعه 21 شهریور 1393, 00:00 صبح
مهندس من فقط با finish () هم استفاده کردم ولی نشد . جالبی اینکه برنامه بسته میشه و هنگامی که دوباره راه اندازی میشه activity2 رو نمایش میده

slr560
جمعه 21 شهریور 1393, 00:16 صبح
اول اینکه همیشه وقتی از یک اکتیوی به اکتیویتی دیگه میری اگه قبلیرو دیگه نیاز نداری حتما موقعی که داری با Intent حرکت میکنی بینشون بیا قبلی رو با finish ببند. بعد startActivity یه finish اضافه کن
اینجوری دیگه اکتیویتی ها توی stack قرار نمیگیرن و برنامت درست کار میکنه
و دوم اینکه این اکتیویتی که بالا کدشو گزاشتی با چیزایی که توی پست ۱ گفتم درست میشه . اکتیویتی های دیگتو نمیدونم چی نوشتی

pbm_soy
جمعه 21 شهریور 1393, 01:33 صبح
اول اینکه همیشه وقتی از یک اکتیوی به اکتیویتی دیگه میری اگه قبلیرو دیگه نیاز نداری حتما موقعی که داری با Intent حرکت میکنی بینشون بیا قبلی رو با finish ببند. بعد startActivity یه finish اضافه کن
اینجوری دیگه اکتیویتی ها توی stack قرار نمیگیرن و برنامت درست کار میکنه



جسارتا آیا امکانش الگوریتم بالا را بازتر کنید
یا منظورتون از اینکه که به startactivity یه finish اضافه کن یعنی چی؟
یا اینکه کدش را اگر زحمتی نیست بنویسید

hosseinrasouli
جمعه 21 شهریور 1393, 12:01 عصر
مهندس باز مشکلمون حل نشد . دوستان راهنمایی کنند

کد اکتیویتی 2 :


package com.hrasouli.chardahmahsoom;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.graphics.Typeface;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewConfiguration;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;

public class Activity2 extends ActionBarActivity {

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity2);

getOverflowMenu();
Button btn_piambar=(Button)findViewById(R.id.btn1);
Button btn_emam_ali=(Button)findViewById(R.id.btn2);
Button btn_hazrat_fatemeh=(Button)findViewById(R.id.btn3) ;
Button btn_emam_hassan=(Button)findViewById(R.id.btn4);
Button btn_emam_hussein=(Button)findViewById(R.id.btn5);
Button btn_emam_sajjad=(Button)findViewById(R.id.btn6);
Button btn_emam_bagher=(Button)findViewById(R.id.btn7);
Button btn_emam_sadegh=(Button)findViewById(R.id.btn8);
Button btn_emam_kazem=(Button)findViewById(R.id.btn9);
Button btn_emam_reza=(Button)findViewById(R.id.btn10);
Button btn_emam_javad=(Button)findViewById(R.id.btn11);
Button btn_emam_hadi=(Button)findViewById(R.id.btn12);
Button btn_emam_askari=(Button)findViewById(R.id.btn13);
Button btn_emam_mahdi=(Button)findViewById(R.id.btn14);
Typeface bkoodak=Typeface.createFromAsset(getAssets(), "font/BKoodkBd.ttf");
btn_piambar.setTypeface(bkoodak);
btn_emam_ali.setTypeface(bkoodak);
btn_hazrat_fatemeh.setTypeface(bkoodak);
btn_emam_hassan.setTypeface(bkoodak);
btn_emam_hussein.setTypeface(bkoodak);
btn_emam_sajjad.setTypeface(bkoodak);
btn_emam_bagher.setTypeface(bkoodak);
btn_emam_sadegh.setTypeface(bkoodak);
btn_emam_kazem.setTypeface(bkoodak);
btn_emam_reza.setTypeface(bkoodak);
btn_emam_javad.setTypeface(bkoodak);
btn_emam_hadi.setTypeface(bkoodak);
btn_emam_askari.setTypeface(bkoodak);
btn_emam_mahdi.setTypeface(bkoodak);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENT ATION_PORTRAIT);

btn_piambar.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {

Intent page=new Intent(Activity2.this,Textmain.class);
page.putExtra("param", 1);
startActivity(page);
}
});
btn_emam_ali.setOnClickListener(new OnClickListener() {

public void onClick(View arg0) {
Intent page=new Intent(Activity2.this,Textmain.class);
page.putExtra("param", 2);
startActivity(page);

}
});
btn_hazrat_fatemeh.setOnClickListener(new OnClickListener() {

public void onClick(View arg0) {
Intent page=new Intent(Activity2.this,Textmain.class);
page.putExtra("param", 3);
startActivity(page);

}
});

btn_emam_hassan.setOnClickListener(new OnClickListener() {

public void onClick(View arg0) {
Intent page=new Intent(Activity2.this,Textmain.class);
page.putExtra("param", 4);
startActivity(page);

}
});

btn_emam_hussein.setOnClickListener(new OnClickListener() {

public void onClick(View arg0) {
Intent page=new Intent(Activity2.this,Textmain.class);
page.putExtra("param", 5);
startActivity(page);

}
});

btn_emam_sajjad.setOnClickListener(new OnClickListener() {

public void onClick(View arg0) {
Intent page=new Intent(Activity2.this,Textmain.class);
page.putExtra("param", 6);
startActivity(page);

}
});

btn_emam_bagher.setOnClickListener(new OnClickListener() {

public void onClick(View arg0) {
Intent page=new Intent(Activity2.this,Textmain.class);
page.putExtra("param", 7);
startActivity(page);

}
});

btn_emam_sadegh.setOnClickListener(new OnClickListener() {

public void onClick(View arg0) {
Intent page=new Intent(Activity2.this,Textmain.class);
page.putExtra("param", 8);
startActivity(page);

}
});

btn_emam_kazem.setOnClickListener(new OnClickListener() {

public void onClick(View arg0) {
Intent page=new Intent(Activity2.this,Textmain.class);
page.putExtra("param", 9);
startActivity(page);

}
});

btn_emam_reza.setOnClickListener(new OnClickListener() {

public void onClick(View arg0) {
Intent page=new Intent(Activity2.this,Textmain.class);
page.putExtra("param", 10);
startActivity(page);

}
});

btn_emam_javad.setOnClickListener(new OnClickListener() {

public void onClick(View arg0) {
Intent page=new Intent(Activity2.this,Textmain.class);
page.putExtra("param", 11);
startActivity(page);

}
});

btn_emam_hadi.setOnClickListener(new OnClickListener() {

public void onClick(View arg0) {
Intent page=new Intent(Activity2.this,Textmain.class);
page.putExtra("param", 12);
startActivity(page);

}
});

btn_emam_askari.setOnClickListener(new OnClickListener() {

public void onClick(View arg0) {
Intent page=new Intent(Activity2.this,Textmain.class);
page.putExtra("param", 13);
startActivity(page);

}
});

btn_emam_mahdi.setOnClickListener(new OnClickListener() {

public void onClick(View arg0) {
Intent page=new Intent(Activity2.this,Textmain.class);
page.putExtra("param", 14);
startActivity(page);

}
});
}


public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {


case R.id.action_share:
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("text/plain");
String str="دانلود نرم افزار : \n لينک دانلود : www.google.com";
shareIntent.putExtra(Intent.EXTRA_TEXT,str);
shareIntent.putExtra(Intent.EXTRA_SUBJECT, R.string.zendegi_chardah_mahsoom);
startActivity(Intent.createChooser(shareIntent, "اشتراک گذاري ..."));

return true;

case R.id.action_setting:
Intent page_setting=new Intent(Activity2.this,Setting.class);
startActivity(page_setting);

return true;


default:
return super.onOptionsItemSelected(item);
}
}

private void getOverflowMenu() {
try {
ViewConfiguration config = ViewConfiguration.get(this);
java.lang.reflect.Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
if(menuKeyField != null) {
menuKeyField.setAccessible(true);
menuKeyField.setBoolean(config, false);

}
} catch (Exception e) {
e.printStackTrace();
}
}


public void onBackPressed() {

Intent page_main=new Intent(Activity2.this,MainActivity.class);
startActivity(page_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

}




کد manifest


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.hrasouli.chardahmahsoom"
android:versionCode="1"
android:versionName="1.0"
android:installLocation="preferExternal" >

<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="19" />

<uses-permission android:name="android.permission.SEND_SMS" />

<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar" >
<activity
android:name="com.hrasouli.chardahmahsoom.MainActivity"
android:label="@string/app_name"
android:theme="@style/Theme.Tempx" >
</activity>
<activity
android:name="com.hrasouli.chardahmahsoom.Textmain"
android:label="@string/app_name"
android:theme="@style/Theme.Tempminute" >
</activity>
<activity
android:name="com.hrasouli.chardahmahsoom.Activity2"
android:label="@string/app_name"
android:theme="@style/Theme.Tempx" >
</activity>
<activity
android:name="com.hrasouli.chardahmahsoom.Splash"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.hrasouli.chardahmahsoom.About"
android:label="@string/title_activity_about"
android:theme="@style/Theme.Tempx" >
</activity>
<activity
android:name="com.hrasouli.chardahmahsoom.Temas"
android:label="@string/title_activity_temas"
android:theme="@style/Theme.Tempx"
android:windowSoftInputMode="stateHidden|adjustResize" >
</activity>
<activity
android:name="com.hrasouli.chardahmahsoom.Setting"
android:label="@string/title_activity_setting"
android:theme="@style/Theme.Tempx" >
</activity>
</application>

</manifest>

hosseinrasouli
جمعه 21 شهریور 1393, 12:12 عصر
نکته ای که هست اینه که موقعی که برنامه فقط صفحه MainActivity رو باز کرده همانجا اگر خروج رو بزنم بدون مشکل کار می کنه . ولی وقتی به Activity2 می رم و بر می گردم به صفحه اصلی موقع خروج دوباره به activity2 برمی گرده ( کدها دو Activity را در بالا گذاشتم)

slr560
جمعه 21 شهریور 1393, 12:42 عصر
اول اینکه کد نویسی شما بهینه نیس
شما وقتی تعداد زیادی دکمه دارید و میخواید onClickListenet واسش بزارید نباید واسه هر کدوم یه Listener تعریف کنین
موقعی که کلاس رو تعریف میکنید باید از onClickListenet ایمپلیمنت کنید. به این صورت:

public class Activity2 extends Activity implements View.OnClickListener


بعدش زیر خط بالا یه خط قرمر میکشه و میگه حتما باید متد onClick رو ایملیمنت کنی. که شما میای متد زیر رو به جای همه ی متدهای setOnclickListener قرار میدی:

@Override
public void onClick(View v) {

}

حالا میای یه switch میزاری و شرط سوییچ رو به صورت زیر درست میکنی. اینجوری تعداد خط کدها ۱/۳ بالا میشه

@Override
public void onClick(View v) {


switch (v.getId()){
case R.id.btn_hazrat_fatemeh:
//kari ke mikhay anjam bedi
break;
case R.id.btn_emam_hassan:
//kari ke mikhay anjam bedi
break;
//...
}
}

و اما راجع به مشکل اصلی:
ببین مثلا فرض کن میخوای از MainActivity بری به Activity2
خب شما میای یه اینتنت به صورت زیر مینویسی:

startActivity(new Intent(MainActivity.this,Activity2.class));

با کد بالا میری به اکتیویتی ۲ . حالا چون نیاز داری دوباره برگردی به MainActivity نباید اینو ببندی یا به قول معروف finish کنی. چون نیاز داری بهش که دوباره برگردی و نمایشش بدی دیگه. خب چیکار میکنی؟؟؟ میای به همین شکل که onPause هست و داخل استک هست ولش میکنی
حالا الان داخل Activity2 هستی . شما کاراتو انجام میدی و میخوای برگردی به MainActivity. فقط کافیه توی متد onBackPressed بیای بنویسی finish()
همین. تموم :لبخندساده:

hosseinrasouli
یک شنبه 23 شهریور 1393, 23:10 عصر
مهندس درست شد.
اینکه مگید کد بهینه نیست حق دارین چون من تازه دارم با Android و بخصوص جاوا کار میکنم (البته c#.net رو مسلط هستم) و سوالات زیادی رو دارم که به لطف شما دوستان برنامه نویس برطرف میشه . بازم تشکر مهندس :تشویق: